【问题标题】:PyQt5 button to run function and update LCDPyQt5 按钮运行功能和更新 LCD
【发布时间】:2015-07-25 13:53:50
【问题描述】:

我开始使用 Python 3 在 PyQt5 中创建 GUI。单击按钮时,我想运行“randomint”函数并将返回的整数显示到名为“lcd”的 QLCDNumber。

这是我的代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLCDNumber
from random import randint


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.initui()

    def initui(self):
        lcd = QLCDNumber(self)

        button = QPushButton('Generate', self)
        button.resize(button.sizeHint())

        layout = QVBoxLayout()
        layout.addWidget(lcd)
        layout.addWidget(button)

        self.setLayout(layout)
        button.clicked.connect(lcd.display(self.randomint()))

        self.setGeometry(300, 500, 250, 150)
        self.setWindowTitle('Rand Integer')
        self.show()

    def randomint(self):
        random = randint(2, 99)
        return random

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Window()
    sys.exit(app.exec_())

我得到了输出:

TypeError:参数 1 具有意外类型“NoneType”

如何让 LCD 显示函数“randomint”的输出?

【问题讨论】:

    标签: python user-interface python-3.x pyqt5


    【解决方案1】:

    问题在于button.clicked.connect 需要插槽(Python 可调用对象),但lcd.display 返回None。所以我们需要一个用于button.clicked.connect 的简单函数(插槽),它将显示您新生成的值。这是工作版本:

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLCDNumber
    from random import randint
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.initui()
    
    
        def initui(self):
            self.lcd = QLCDNumber(self)
    
            button = QPushButton('Generate', self)
            button.resize(button.sizeHint())
    
            layout = QVBoxLayout()
            layout.addWidget(self.lcd)
            layout.addWidget(button)
    
            self.setLayout(layout)
            button.clicked.connect(self.handleButton)
    
            self.setGeometry(300, 500, 250, 150)
            self.setWindowTitle('Rand Integer')
            self.show()
    
    
        def handleButton(self):
            self.lcd.display(self.randomint())
    
    
        def randomint(self):
            random = randint(2, 99)
            return random
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Window()
        sys.exit(app.exec_())
    

    【讨论】:

    • 做到了。谢谢你的解释!
    【解决方案2】:

    解决TypeError: argument 1 has unexpected type 'NoneType 的另一种方法是在您的插槽前面加上lambda:,如下所示:

    self.tableWidget.cellChanged['int','int'].connect(lambda:self.somefunction())
    

    我实际上不知道为什么,但这是一个对我有用的解决方案。

    【讨论】:

      猜你喜欢
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多