- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
对于 PyQt5 仪器项目,我希望有几个相继的 QInputDialog 以便输入一些输入。如果用户按下“取消”按钮,我希望程序返回到第一个对话框窗口。这是我的代码:
def getChoice(self):
while True:
items = ("Make a new testfile","Open an existing one")
item, okPressed = QInputDialog.getItem(self, "Select","You want to: ", items, 0, False)
if not okPressed: #close all
sys.exit(0)
elif okPressed and item:
print(item)
if item == "Open an existing one" :
pathFile, ok = QFileDialog.getOpenFileName(self, "Open a file", "","All Files(*);;Python Files (*.py)")
print(pathFile)
break
elif item == "Make a new testfile" :
items2 = ("New profil","Existing profil")
item2, okPressed2 = QInputDialog.getItem(self,"Select", "", items2, 0, False)
if not okPressed2: #pass so come back to the previous inputDialog
pass
elif okPressed2 and item2:
print(item2)
if item2 == "New profil" :
while True:
name, ok = QInputDialog.getText(self, "Profil name", "Enter name:", QLineEdit.Normal)
if ok and name:
dirName = 'Profiles/' + name
if not os.path.exists(dirName):
os.makedirs(dirName)
break
else :
QMessageBox.about(self, 'Error','Profile name already taken')
elif ok and not name:
QMessageBox.about(self, 'Error', 'Enter a name')
else :
#here I'd like to return to the initial inputDialog if the user press cancel
break
elif item2 == "Existing profil" :
pathprofil = QFileDialog.getOpenFileName(self, "Nom de profil", "","All Files(*)")
print(pathprofil)
break
使用这种方法,当第二个 while 循环发生时,我遇到了问题:我想在激活取消按钮时返回到第一个循环。
我不认为存在一种方法可以打破另一个 while 循环,而且我缺乏想象力..
关于如何做到这一点有什么想法吗?
最佳答案
尝试一下:
import os
from PyQt5.QtWidgets import (QApplication, QWidget, QLineEdit,
QInputDialog, QFileDialog, QMessageBox,
QGridLayout, QLabel, QPushButton, QFrame)
class InputDialog(QWidget):
def __init__(self):
super(InputDialog,self).__init__()
label1 = QLabel("Make/Open file:")
label2 = QLabel("pathFile:")
label3 = QLabel("profil:")
self.nameLable = QLabel()
self.nameLable.setFrameStyle(QFrame.Panel | QFrame.Sunken)
self.pathFile = QLabel()
self.pathFile.setFrameStyle(QFrame.Panel | QFrame.Sunken)
self.profilLable = QLabel()
self.profilLable.setFrameStyle(QFrame.Panel | QFrame.Sunken)
nameButton = QPushButton("...")
nameButton.clicked.connect(self.selectName)
profilButton = QPushButton("...")
profilButton.clicked.connect(self.selectProfil)
mainLayout = QGridLayout()
mainLayout.addWidget(label1, 0, 0)
mainLayout.addWidget(self.nameLable, 0, 1)
mainLayout.addWidget(nameButton, 0, 2)
mainLayout.addWidget(label3, 1, 0)
mainLayout.addWidget(self.profilLable,1, 1)
mainLayout.addWidget(profilButton, 1, 2)
mainLayout.addWidget(label2, 2, 0)
mainLayout.addWidget(self.pathFile, 2, 1, 1, 2)
mainLayout.setRowMinimumHeight(2, 40)
mainLayout.addWidget(QLabel(), 3, 0)
mainLayout.setRowStretch(3, 1)
mainLayout.setColumnMinimumWidth(1, 200 )
mainLayout.setSpacing(5)
self.setLayout(mainLayout)
def selectName(self):
items = ("Make a new testfile", "Open an existing one")
item, okPressed = QInputDialog.getItem(self,
"Select",
"You want to: ",
items, 0, False)
if okPressed :
self.nameLable.setText(item)
if item == "Open an existing one" :
pathFile, ok = QFileDialog.getOpenFileName(self,
"Open a file",
"",
"All Files(*);;Python Files (*.py)")
if pathFile:
self.pathFile.setText(pathFile)
self.profilLable.setText("")
elif item == "Make a new testfile" :
self.selectProfil()
else:
sys.exit(0)
def selectProfil(self):
if self.nameLable.text() == "Make a new testfile" :
self.pathFile.setText("")
items2 = ("New profil", "Existing profil")
item2, okPressed2 = QInputDialog.getItem(self,"Select", "", items2, 0, False)
if not okPressed2: #pass so come back to the previous inputDialog
self.selectName()
self.profilLable.setText(item2)
if item2 == "New profil" :
name, ok = QInputDialog.getText(self,
"Profil name",
"Enter file name:",
QLineEdit.Normal)
if ok and name:
dirName = 'Profiles' # /' + name
if not os.path.exists(dirName):
os.makedirs(dirName)
filepath = os.path.join(dirName, name)
if not os.path.isfile(filepath):
f = open(filepath, "a")
f.close()
self.pathFile.setText(os.path.abspath(filepath))
else :
QMessageBox.about(self, 'Error','Profile name already taken')
self.selectProfil()
elif ok and not name:
QMessageBox.about(self, 'Error', 'Enter a name')
else :
#here I'd like to return to the initial inputDialog if the user press cancel
self.selectProfil()
elif item2 == "Existing profil" :
pathprofil, ok = QFileDialog.getOpenFileName(self,
"Nom de profil",
"", "All Files(*)")
self.pathFile.setText(pathprofil)
elif not self.nameLable.text():
QMessageBox.about(self, 'Error', 'Select `Make / Open file`')
self.selectName()
if __name__=="__main__":
import sys
app = QApplication(sys.argv)
myshow = InputDialog()
myshow.setWindowTitle("InputDialog")
myshow.show()
sys.exit(app.exec_())
关于python 多个QInputDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55004880/
我正在尝试将默认文本填充到 QInputDialog 的 LineEdit 字段中(例如填充旧值以重命名)。这是代码: bool dialogResult; QInputDialog *ren
我正在尝试将默认文本填充到 QInputDialog 的 LineEdit 字段中(例如填充旧值以重命名)。这是代码: bool dialogResult; QInputDialog *ren
我正在学习 Qt 和 C++,并且开始使用 QInputDialog 和 QMessageBox。官方 Qt 文档将以下内容声明为默认的 QInputDialog 参数: double QInputD
基本上,我使用 QtConcurrent 从另一个线程调用一个函数。 按预期工作,但是一旦我在被调用的函数中创建了一个 QInputDialog,我就会收到一个断言异常,告诉我必须在主 GUI 线程中
是否可以设置 QinputDialog 的样式? 我有以下代码: void calibratemotors::on_pushButton_shuttopen_manualent_clicked() {
我需要创建一个包含多行的文本输入对话框。有什么方法可以使用 QInputDialog 来做到这一点吗? 如果不是,最简单的建议是子类化 QPlainTextEdit 吗? 最佳答案 QInputDia
我正在尝试使用没有按钮的 QInputDialog。它看起来就像我想要的,但我无法确认输入(将其用于文本输入)。是否有可能用回车键确认,以便 exec() 返回 QInputDialog::Accep
是否可以轻松地制作一个包含多个QComboBox元素的QInputDialog?或者,提示具有不同字段可能性的弹出窗口/对话框的最可行方法是什么(等 2 x QComboBox+ 1 x QLineE
PyQt5中QInputDialog的使用,Qt的QInputDialog类提供了一种简单方面的对话框来获得用户的单个输入信息,它提供了4种数据类型的输入: 1)字符串型(方法=QInputDia
我想在更改QInputDialog的getInt方法调用的对话框的值时打印该值。 我运行以下代码,但它不起作用: import sys from PyQt5.QtCore import Slot fr
我正在尝试为我的QInputDialog设置一些选项。但如果我调用 getText 这些设置就不起作用。 如何更改从 getText 弹出的窗口的外观? import sys from PyQt5 i
我有一个带有组合框的输入对话框,可以在 2 个选项之间进行选择。 void MainWindow::on_UpdateCPUAssmblyBtn_clicked() { if(!ui->Ass
我目前正在使用这样的东西: QString text = QInputDialog::getText(this, tr("title"),"Hello World !! What goes in he
我正在为使用 Qt 框架的考试做一些准备,我想知道如何以基本方式使用 QInputDialog 和 QMessageBox(我的考试是手写编码) 当谈到使用时,Qt API 确实让人难以理解,但它对我
QString QInputDialog::getText ( QWidget * parent, const QString & title, const QString & label,
我有一些列表和QInputDialog。我的列表中可能有相同的字符串,所以我不想得到字符串结果而是项目索引。是真的吗? QStringList list; for (Serial serial: se
在对应用程序进行 GUI 测试的测试环境中,会出现这种情况(取决于正在测试的当前配置),提示用户通过 QInputDialog 进行选择。 问题是,这会阻止正在运行的测试,直到有人手动单击“确定”按钮
我想向我的 QInputDialog 添加某种类型的验证。我使用对话框的输入来创建文件系统路径。所以我想排除@$#%^&*() 之类的字符,但保留 - 和 _。我正在考虑应用正则表达式模式,但不确定工
我正在使用 Python 和 PySide 开发 Qt 应用程序。该应用程序在 Ubuntu Linux 上运行;机器有触摸屏。 “板载”虚拟键盘用于让用户输入文本。默认情况下它是隐藏的。一旦像 ge
文档说该函数返回一个整数: https://pyside.github.io/docs/pyside/PySide/QtGui/QInputDialog.html#PySide.QtGui.PySid
我是一名优秀的程序员,十分优秀!