2015-05-14 36 views
3

我開始使用Python 3在PyQt5中創建GUI。單擊按鈕我想運行「randomint」函數並將返回的整數顯示到名爲「lcd」的QLCDNumber 」。PyQt5按鈕來運行功能和更新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」 輸出?

回答

2

問題是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_()) 
+0

這樣做。感謝您的解釋! –

0

解決TypeError: argument 1 has unexpected type 'NoneType的另一種方法是用lamba:前綴您的插槽,像這樣:

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

我居然不知道爲什麼但它是一個解決方案這對我有效。

+0

「拉姆達:」爲我做了詭計。 –