【问题标题】:By clicking a button, print some texts entered in QLineEdit when a checkbox is checked PyQt4通过单击按钮,在选中复选框时打印在 QLineEdit 中输入的一些文本 PyQt4
【发布时间】:2017-09-30 08:45:32
【问题描述】:

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

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_()

正如您在上面看到的,我希望“Widget”类中的按钮连接到“Func”类中的“someFunc”方法。因此,当在“self.le”中输入一些文本并选中“checkBox”时,我希望“someFunc”通过单击按钮打印在“self.le”中输入的文本。如果未选中“复选框”,则即使输入了一些文本,单击该按钮也不应该导致任何事情发生。

如果有人知道如何解决,请告诉我,谢谢!

【问题讨论】:

    标签: python checkbox signals pyqt4 qlineedit


    【解决方案1】:

    您需要将按钮的点击信号连接到处理它的函数。像这样: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_()
    

    编辑: 简而言之:在Func 类中,self.w 包含对小部件的引用,当单击按钮时将从该小部件发出信号。

    为什么我要保留对那个小部件的引用?这样我就可以访问小部件的comboboxlineedit。如果无法访问它们,我无法查看 checkbox 是否被选中或用户在 textedit 中输入的内容。

    【讨论】:

    • 当 someFunc 在另一个类如 Func 时,你能举个例子吗?因为我实际上有另一个更大的项目,而这个 someFunc 必须在另一个类中。谢谢!
    • 我编辑了代码并将信号连接到Func类的方法。此外,我在构造过程中将小部件的一个实例传递给Func 类,以便它可以查看是否检查了checkbox,并在发出信号时从lineedit 获取字符串。
    • 谢谢!但是我不明白为什么要放置一个实例变量“self.w”来接收信号?
    • 你不需要它来获取信号。您需要它来访问 Func 类中的复选框和行编辑。
    • widgetWidget 类有什么关系?它是如何通过的?
    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多