gpt4 book ai didi

python - 如何使用 Line Edit 在 PyQt 中等待用户输入?

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:37 24 4
gpt4 key购买 nike

我正在做一个“包装”我用 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() 一样改变? (如果可能,不添加任何新布局。)

谢谢。

最佳答案

结构化编程与面向事件的编程具有不同的范例,GUI 使用事件来警告应该执行该任务的插槽。

在你的情况下,处理部分必须在另一个方法中完成,并在发出信号时调用

对于您的情况,QLineEdit 小部件有 2 个信号可以为您服务,第一个是 editingFinished,第二个是 returnPressed,在本例中,我选择了当我按下 enter 或 return 键时发出的第二个。然后我们将该信号与执行任务的调用进程槽连接。

我做了一些不影响设计的更改,首先将基类从 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_())

关于python - 如何使用 Line Edit 在 PyQt 中等待用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43639480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com