PyQt5按钮运行功能并更新LCD

2024-05-20 21:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我的代码:

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: argument 1 has unexpected type 'NoneType'

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


Tags: 函数fromimportselflcddefsysbutton
2条回答

另一种解决TypeError: argument 1 has unexpected type 'NoneType的方法是用lambda:作为插槽的前缀,如下所示:

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

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

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

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

相关问题 更多 >