2017-08-03 85 views
-1

我可以讓我的程序在點擊按鈕時更改狀態欄文本。我一直收到更改按鈕上的Pyqt狀態欄文本點擊

"TypeError: argument 1 has unexpected type 'NoneType'"錯誤'self.closeButton.clicked.connect(self.process('text'))''。 我不知道該怎麼辦了

import sys 
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, 
QPushButton 
from PyQt5.QtGui import QIcon 


class App(QMainWindow): 

def process(self): 
    self.statusBar.showMessage('online') 

def __init__(self): 
    super().__init__() 
    self.title = 'Red Queen v0.4' 
    self.initUI() 

def initUI(self): 
    self.setWindowTitle(self.title) 
    self.statusBar().showMessage('Offline') 
    self.showMaximized() 
    self.setStyleSheet("background-color: #FFFFFF;") 
    self.textbox = QLineEdit(self) 
    self.textbox.move(500, 300) 
    self.textbox.resize(350, 20) 
    self.textbox.setStyleSheet("border: 3px solid red;") 
    self.setWindowIcon(QIcon('Samaritan.png')) 
    text = QLineEdit.text(self.textbox) 
    self.closeButton = QPushButton('process', self) 
    self.closeButton.clicked.connect(self.process('text')) 
    self.closeButton.show() 
    self.show() 
    self.textbox.show() 

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

您必須將信號連接到插槽,self.process('文本')不是插槽/可調用。你的例子也不是最小的。 – Trilarion

回答

2

更改行:

self.closeButton.clicked.connect(self.process('text')) 

self.closeButton.clicked.connect(self.process) 

您需要本身傳遞給函數的參數,而不是一個函數調用的結果(因爲你的方法不包含返回聲明,self.process()返回None)。

如果你想爲process方法接受一個參數,您必須首先修改它,因爲軍機已經提出:

def process(self, text): 
    self.statusBar.showMessage(text) 

但改變它連接到點擊信號線:

self.closeButton.clicked.connect(lambda: self.process('offline')) 

需要使用lambda表達式將可調用對象傳遞給connect()。

1

更改process功能:

def process(self, text): 
    self.statusBar.showMessage(text) 

現在,當你調用函數 self.closeButton.clicked.connect(self.process('text'))將採取文字和打印。

+0

沒問題,已經修復了,但是現在窗口本身在點擊按鈕後關閉,儘管沒有退出命令與它關聯。 – user3657752