2017-08-03 88 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