【问题标题】:PyQt multiple buttons print same valuePyQt 多个按钮打印相同的值
【发布时间】:2017-03-28 00:12:10
【问题描述】:

我在一个表单上有三个按钮,例如,当我单击 5% 按钮时,它会打印 5%。但由于某种原因,所有按钮都打印了 60%。

我真的不明白为什么?

我的代码如下。

class ThirdWindow(QWidget, Ui_Form3):
    def __init__(self):
        super(ThirdWindow, self).__init__()
        self.dbu = DatabaseHandling.DatabaseUtility()
        self.msl = None

        # Show UI on screen + resize window
        self.setupUi(self)
        self.picIndicator.setPixmap(QPixmap("M:\QtProjects\\Resources\\138691.png"))
        self.setFixedSize(350, 480)

        #  Define what should happen on button click
        self.btnQuit.clicked.connect(lambda: self.close())
        self.btnSixtyPercent.clicked.connect(lambda: self.check_clicked())
        self.btnTenPercent.clicked.connect(lambda: self.check_clicked())
        self.btnFivePercent.clicked.connect(lambda: self.check_clicked())


    #  TODO: Create a window that ask's for the spot it's specific color
    '''def indication(self):
        d = DialogOne()
        d.exec_()'''

    def check_clicked(self):
        if self.btnSixtyPercent.text() == "60":
            print("60%")
        elif self.btnFivePercent.text() == "5":
            print("5%")
        elif self.btnTenPercent.text() == "10":
            print("10%")

【问题讨论】:

    标签: python qt pyqt


    【解决方案1】:

    将信号连接到插槽时,它会在信号生成时执行,如果要使用发出信号的对象,可以使用sender()。不必使用lambda函数.

        self.btnQuit.clicked.connect(self.close)
        self.btnSixtyPercent.clicked.connect(self.check_clicked)
        self.btnTenPercent.clicked.connect(self.check_clicked)
        self.btnFivePercent.clicked.connect(self.check_clicked)
    
    
    def check_clicked(self):
            print("{}%".format(self.sender().text()
    

    完整代码:

    class ThirdWindow(QWidget, Ui_Form3):
        def __init__(self):
            super(ThirdWindow, self).__init__()
            self.dbu = DatabaseHandling.DatabaseUtility()
            self.msl = None
    
            # Show UI on screen + resize window
            self.setupUi(self)
            self.picIndicator.setPixmap(QPixmap("M:\QtProjects\\Resources\\138691.png"))
            self.setFixedSize(350, 480)
    
            #  Define what should happen on button click
            self.btnQuit.clicked.connect(self.close)
            self.btnSixtyPercent.clicked.connect(self.check_clicked)
            self.btnTenPercent.clicked.connect(self.check_clicked)
            self.btnFivePercent.clicked.connect(self.check_clicked)
    
    
        #  TODO: Create a window that ask's for the spot it's specific color
        '''def indication(self):
            d = DialogOne()
            d.exec_()'''
    
        def check_clicked(self):
            print("{}%".format(self.sender().text()))
    

    【讨论】:

    • 以下可能吗?:如果我删除按钮文本,并想检查使用 isChecked 按下了哪个按钮,你能告诉我一个简单的例子吗?
    • 当然有可能,因为在sender() 中您将拥有该对象,在这种情况下为QCheckBox,您可以使用它的功能。另一方面,我认为我的回答回答了您的疑问,如果我这样做了,请将其标记为正确。
    • 在这种情况下,我们必须使用信号 stateChanged,它可以为我们提供按钮的信息。
    • 你能用我的代码添加一个例子吗?我会很感激的! :)
    • btnSixtyPercent、btnTenPercent、btnFivePercent 是 QCheckBox 吗?
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 2022-08-05
    相关资源
    最近更新 更多