python - pyqt5主窗口内弹出自定义对话框输入

标签 python pyqt pyqt5

我需要生成一个通过单击应用程序中的QPushButton(通过clicked)触发的自定义弹出输入窗口。它需要从不同类型的用户获取多个输入,然后将它们返回到主窗口应用程序内的调用函数。我发现诸如 QInputDialog 之类的内置函数可以对单个特定输入执行此操作,但我不知道在弹出窗口要求多个不同类型的输入的情况下如何执行此操作立即(最好是在 Qt Designer 中设计的窗口中)。有谁知道该怎么做吗?

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_())

最佳答案

没有单一的解决方案,但我会给你一个指南,让你做你想做的事。

如果您想获得具有 QInputDialog 行为的小部件,您必须首先选择正确的模板,在这种情况下,一个不错的选择是带有按钮底部的对话框或带有右侧按钮的对话框,添加您想要的组件,定位它等.

enter image description here

然后,当您显示代码时,您创建一个继承自 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

然后在您的函数中使用它:

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

关于python - pyqt5主窗口内弹出自定义对话框输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49909633/

相关文章:

python - 在 python3 中加入字符串列表的第一个元素

python - 在linux上的anaconda虚拟环境中下载spacy ray

python - 为什么有执行权限的python脚本在Ubuntu上无法运行?

python - Scikit 的管道 - 如何访问特定阶段的结果

python - PyQt4如何恢复最小化的窗口?

java - 转换过程中的一般错误 : Unsupported class file major version 61 in Linux when I build an android app

Qt 5.7 - QWebEngineView - 将 HTML 按钮点击事件连接到 C++/Qt Slot

python - 从 PyQt GUI 连接到串口

qt - QTreeWidgetItem 内的 QComboBox

python - 前一个 GUI 框架的 'Back' 按钮的 PyQt 适当函数