PyQt5 按钮 运行 功能和更新 LCD
PyQt5 button to run function and update LCD
我开始使用 Python 在 PyQt5 中创建 GUI 3. 单击按钮我想 运行 "randomint" 函数并将返回的整数显示到QLCDNumber 名为 "lcd".
这是我的代码:
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" 的输出?
问题是 button.clicked.connect
需要插槽(Python 可调用对象),但是 lcd.display
returns 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_())
解决 TypeError: argument 1 has unexpected type 'NoneType
的另一种方法是在您的广告位前加上 lambda:
前缀,如下所示:
self.tableWidget.cellChanged['int','int'].connect(lambda:self.somefunction())
我其实不知道为什么,但这是一个对我有用的解决方案。
我开始使用 Python 在 PyQt5 中创建 GUI 3. 单击按钮我想 运行 "randomint" 函数并将返回的整数显示到QLCDNumber 名为 "lcd".
这是我的代码:
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" 的输出?
问题是 button.clicked.connect
需要插槽(Python 可调用对象),但是 lcd.display
returns 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_())
解决 TypeError: argument 1 has unexpected type 'NoneType
的另一种方法是在您的广告位前加上 lambda:
前缀,如下所示:
self.tableWidget.cellChanged['int','int'].connect(lambda:self.somefunction())
我其实不知道为什么,但这是一个对我有用的解决方案。