通过点击一个按钮,当复选框被选中时,打印一些在QLineEdit中输入的文本PyQt4

问题描述:

通过点击一个按钮,我想打印一些在QLineEdit中被选中的文本。我的例子代码如下:通过点击一个按钮,当复选框被选中时,打印一些在QLineEdit中输入的文本PyQt4

import sys 
import PyQt4 
from PyQt4 import QtGui, QtCore 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 

class Widget(QWidget): 
    def __init__(self, parent= None): 
     super(Widget, self).__init__(parent) 
     layout = QGridLayout() 

     self.setLayout(layout) 

     self.checkBox = QCheckBox() 
     layout.addWidget(self.checkBox, 0, 0) 


     self.le = QLineEdit() 
     layout.addWidget(self.le, 0, 1) 

     self.btn = QPushButton('Run') 
     layout.addWidget(self.btn, 0, 3) 


class Func(): 
    def __init__(self): 
     a = Widget(self) 

    def someFunc(self): 
     ##print() 


app = QApplication(sys.argv) 
widget = Widget() 
widget.show() 
app.exec_() 

正如你可以在上面看到,我想在“窗口小部件”类的按钮连接到在“功能”类“someFunc”的方法。因此,当在“self.le”中输入一些文本以及选中“checkBox”时,我希望“someFunc”通过单击按钮打印在“self.le”中输入的文本。如果未勾选“复选框”,则即使输入了一些文本,单击此按钮也不会导致任何事情发生。

如果有人知道如何解决它,请让我知道谢谢!

您需要将按钮的单击信号连接到将处理它的函数。像这样:button.clicked.connect(handler_function)

import sys 
import PyQt5 
from PyQt5.QtWidgets import * 

class Func(): 
    def __init__(self, widget): 
     self.w = widget 

    def someFunc(self): 
     if self.w.checkBox.isChecked(): 
      print(self.w.le.text()) 

class Widget(QWidget): 
    def __init__(self, parent= None): 
     super(Widget, self).__init__(parent) 
     layout = QGridLayout() 

     self.setLayout(layout) 

     self.checkBox = QCheckBox() 
     layout.addWidget(self.checkBox, 0, 0) 


     self.le = QLineEdit() 
     layout.addWidget(self.le, 0, 1) 

     self.btn = QPushButton('Run') 
     layout.addWidget(self.btn, 0, 3) 

     # connecting to a method in this class 
     # self.btn.clicked.connect(self.some_func) 

     #connecting to a method in another class 
     self.handler_class = Func(self) 
     self.btn.clicked.connect(self.handler_class.someFunc) 

    def some_func(self): 
     if self.checkBox.isChecked(): 
      print(self.le.text()) 


app = QApplication(sys.argv) 
widget = Widget() 
widget.show() 
app.exec_() 

编辑: 简而言之:在self.wFunc类包含以从其中按钮被点击时,信号将被发射的微件的参考。

为什么我要保留对该小部件的引用?以便我可以访问小部件的comboboxlineedit。没有办法访问它们,我看不到checkbox被选中或用户在textedit中输入的内容。

+0

你可以做一个例子,当someFunc在另一个类像Func吗?因为我实际上有另一个更大的项目,而这个someFunc必须在另一个类。谢谢! – ryan9025

+0

我编辑了代码并将信号连接到了'Func'类的方法。另外,我在构建过程中将小部件的一个实例传递给'Func'类,这样它就可以查看是否检查了checkbox,并在信号发出时从stringedit获取字符串。 – Anonta

+0

谢谢!但我不明白为什么应该放置一个实例变量“self.w”来接收信号? – ryan9025