我正在开发一个“包装”我使用PyQt GUI构建的程序的项目,我遇到了一个基本的问题。
我希望程序停止使用代码并等待我的输入,就像raw_input()
一样。这是我的代码:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
class myWidget(QDialog):
def __init__(self,parent=None):
super(myWidget, self).__init__(parent)
self.lineEdit = QLineEdit()
self.textBrowser = QTextBrowser()
self.top_btn = QPushButton("Ask me")
self.bottom_btn = QPushButton("disable")
layout = QVBoxLayout()
layout.addWidget(self.textBrowser)
layout.addWidget(self.lineEdit)
layout.addWidget(self.top_btn)
layout.addWidget(self.bottom_btn)
self.setLayout(layout)
self.lineEdit.setDisabled(True)
self.lineEdit.clear()
self.connect(self.top_btn, SIGNAL("clicked()"), self.inputFunc)
self.connect(self.bottom_btn, SIGNAL("clicked()"), self.disableLine)
def inputFunc(self):
self.lineEdit.clear()
self.lineEdit.setDisabled(False)
self.textBrowser.setText("Welcome to #1 button. what do you want to do?")
userInput = self.lineEdit.text()
if userInput == "anything":
self.textBrowser.append("Ok i will leave you alone")
exit()
else:
self.textBrowser.append("say what?")
def disableLine(self):
self.lineEdit.clear()
self.textBrowser.append("Line edit is disabled")
self.lineEdit.setDisabled(True)
app = QApplication(sys.argv)
form = myWidget()
form.show()
app.exec_()
如您所见,有一个Line Edit及其变量。但它不等待我的输入,它继续使用代码,当然它不允许我改变我的“if”语句的结果。
如何暂停代码并等待用户输入,以便我的“if”语句结果将像raw_input()
一样被更改? (如果可能,不添加任何新布局。)
谢谢。
答案 0 :(得分:1)
结构化编程与面向事件的编程具有不同的范例,GUI使用事件来警告应该执行该任务的插槽。
在您的情况下,处理部分必须以另一种方法完成,并在发出信号时调用
对于您的情况,QLineEdit
窗口小部件有2个可以为您服务的信号,第一个是editingFinished
,第二个是returnPressed
,在这种情况下,我选择的是第二个当我按下回车键或返回键时发出。然后我们将该信号与执行任务的被调用进程槽连接。
我做了一些不影响设计的更改,首先将基类从QDialog更改为QWidget,以及信号和插槽之间的连接方式。如果要关闭窗口,必须使用close()
完整代码:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
class myWidget(QWidget):
def __init__(self,parent=None):
super(myWidget, self).__init__(parent)
self.lineEdit = QLineEdit()
self.textBrowser = QTextBrowser()
self.top_btn = QPushButton("Ask me", )
self.bottom_btn = QPushButton("disable")
layout = QVBoxLayout()
layout.addWidget(self.textBrowser)
layout.addWidget(self.lineEdit)
layout.addWidget(self.top_btn)
layout.addWidget(self.bottom_btn)
self.setLayout(layout)
self.lineEdit.setDisabled(True)
self.top_btn.clicked.connect(self.inputFunc)
self.lineEdit.returnPressed.connect(self.process)
#self.bottom_btn.clicked.connect(self.disableLine)
def inputFunc(self):
self.lineEdit.setDisabled(False)
self.textBrowser.setText("Welcome to #1 button. what do you want to do?")
def process(self):
userInput = self.lineEdit.text()
if userInput == "anything":
self.textBrowser.append("Ok i will leave you alone")
#self.close()
else:
self.textBrowser.append("say what?")
self.lineEdit.clear()
app = QApplication(sys.argv)
w = myWidget()
w.show()
sys.exit(app.exec_())