通过点击一个按钮,当复选框被选中时,打印一些在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.w
的Func
类包含以从其中按钮被点击时,信号将被发射的微件的参考。
为什么我要保留对该小部件的引用?以便我可以访问小部件的combobox
和lineedit
。没有办法访问它们,我看不到checkbox
被选中或用户在textedit
中输入的内容。
你可以做一个例子,当someFunc在另一个类像Func吗?因为我实际上有另一个更大的项目,而这个someFunc必须在另一个类。谢谢! – ryan9025
我编辑了代码并将信号连接到了'Func'类的方法。另外,我在构建过程中将小部件的一个实例传递给'Func'类,这样它就可以查看是否检查了checkbox,并在信号发出时从stringedit获取字符串。 – Anonta
谢谢!但我不明白为什么应该放置一个实例变量“self.w”来接收信号? – ryan9025