我需要通过单击QPushButton我的应用程序中的 a(通过clicked)来生成一个自定义弹出输入窗口。它需要从不同类型的用户那里获取多个输入,然后将它们返回给主窗口应用程序内的调用函数。我发现内置函数QInputDialog可以为单个特定输入执行此操作,但我无法弄清楚如何在一次要求多个不同类型输入的弹出窗口的情况下执行此操作(最好在设计的窗口中)在 Qt 设计器中)。有谁知道如何做到这一点?
import sys
import os
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import uic
path = os.path.dirname(__file__) #uic paths from itself, not the active dir, so path needed
qtCreatorFile = "NAME.ui" #Ui file name, from QtDesigner
Ui_MainWindow, QtBaseClass = uic.loadUiType(path + qtCreatorFile) #process through pyuic
class MyApp(QMainWindow, Ui_MainWindow): #gui class
def __init__(self):
#Set up the gui via Qt
super(MyApp, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.add_button.clicked.connect(self.add_row) #add_button is QPushButton
def add_row(self):
data1, data2, data3 = #popup form to get data (types are not the same)
#do stuff with data
pass
#start app
if __name__ == "__main__":
app = QApplication(sys.argv) #instantiate a QtGui (holder for the app)
window = MyApp()
window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
没有单一的解决方案,但我会给你一个指南,让你做你想做的事。
如果您想获得具有 QInputDialog 行为的小部件,您必须首先选择正确的模板,在这种情况下,一个不错的选择是 Dialog with Buttons Bottom 或 Dialog with Buttons Right,添加您想要的组件,定位它等。
然后当你展示你的代码时,你创建一个继承自 QDialog 的类,然后创建一个方法,你可以在其中获得结果但这样做不要使用show()但exec_()
path = os.path.dirname(__file__)
qtCreatorFile = "some_dialog.ui"
Ui_Dialog, _ = uic.loadUiType(os.path.join(path,qtCreatorFile))
class CustomDialog(QDialog, Ui_Dialog):
def __init__(self):
super(CustomDialog, self).__init__()
self.setupUi(self)
# set initials values to widgets
def getResults(self):
if self.exec_() == QDialog.Accepted:
# get all values
val = self.some_widget.some_function()
val2 = self.some_widget2.some_another_function()
return val1, val2, ...
else:
return None
Run Code Online (Sandbox Code Playgroud)
然后在您的函数中使用它:
class MyApp(QMainWindow, Ui_MainWindow): #gui class
def __init__(self):
#Set up the gui via Qt
super(MyApp, self).__init__()
self.setupUi(self)
self.add_button.clicked.connect(self.add_row) #add_button is QPushButton
def add_row(self):
w = CustomDialog()
values = w.getResults()
if values:
data1, data2, data3 = values
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3966 次 |
| 最近记录: |