如何从现有窗口创建新的 PyQt4 窗口?

2023-11-21

我一直在尝试使用 python3 和 Qt4 从现有窗口调用新窗口。

我已经使用 Qt Designer 创建了两个窗口(主应用程序和另一个窗口),并且我已将 Qt Designer 生成的 .ui 文件转换为 .py 脚本 - 但我似乎无法从主应用程序创建新窗口。

我尝试这样做:

############### MAIN APPLICATION SCRIPT ################

from PyQt4 import QtCore, QtGui
import v2

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(194, 101)
        self.button1 = QtGui.QPushButton(Form)
        self.button1.setGeometry(QtCore.QRect(50, 30, 99, 23))
        self.button1.setObjectName(_fromUtf8("button1"))

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
        self.button1.setText(QtGui.QApplication.translate("Form", "Ventana", None, QtGui.QApplication.UnicodeUTF8))

        self.button1.connect(self.button1, QtCore.SIGNAL(_fromUtf8("clicked()")), self.mbutton1)

    def mbutton1(self):
        v2.main()



if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())
################## SECOND WINDOW #######################

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(400, 300)
        self.label = QtGui.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(160, 40, 57, 14))
        self.label.setObjectName(_fromUtf8("label"))

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("Form", "LABEL 2", None, QtGui.QApplication.UnicodeUTF8))

def main():
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

但我收到此错误消息:

 QCoreApplication::exec: The event loop is already running
 QPixmap: Must construct a QApplication before a QPaintDevice

虽然pyuic可以使用以下命令创建可执行脚本-x, --execute选项,主要用于测试。

主要目的pyuic就是创造staticQt Designer 中的 python 模块ui允许您的文件import将包含的 GUI 类添加到您的应用程序中。

假设您创建了两个ui使用 Qt Designer 命名文件并命名v1.ui and v2.ui.

然后您将像这样创建两个 python 模块:

pyuic4 -o v1.py v1.ui
pyuic4 -o v2.py v2.ui

接下来,您将编写一个单独的main.py从模块导入 GUI 类并根据需要创建它们的实例的脚本。

So your main.py可能看起来像这样:

from PyQt4 import QtGui
from v1 import Ui_Form1
from v2 import Ui_Form2

class Form1(QtGui.QWidget, Ui_Form1):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)
        self.button1.clicked.connect(self.handleButton)
        self.window2 = None

    def handleButton(self):
        if self.window2 is None:
            self.window2 = Form2(self)
        self.window2.show()

class Form2(QtGui.QWidget, Ui_Form2):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Form1()
    window.show()
    sys.exit(app.exec_())

请注意,我稍微更改了 GUI 类的名称以避免命名空间冲突。为了给 GUI 类提供更好的名称,只需设置objectNameQt Designer 中顶级类的属性。并且不要忘记重新运行pyuic完成更改后!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从现有窗口创建新的 PyQt4 窗口? 的相关文章

随机推荐

  • MongoDB:服务器启动警告“数据库未启用访问控制”

    我今天首先安装了MongoDB 3 4 1 但是当我启动它并使用 MongoDB shell 时 它给了我以下警告 C Users hs gt C Program Files MongoDB Server 3 4 bin mongo exe
  • 如何让 git 使用 Textmate 作为我的默认编辑器?

    在命令行中 如果我这样做mate
  • 如何压缩小字符串

    我有一个充满大量 URL 的 sqlite 数据库 它占用了大量的磁盘空间 并且访问它会导致许多磁盘寻道并且速度很慢 平均 URL 路径长度为 97 字节 主机名重复很多 因此我将它们移动到外键表中 有什么好的方法可以压缩它们吗 大多数压缩
  • Pool.apply_async():嵌套函数不执行

    我正在熟悉Pythonmultiprocessing模块 以下代码按预期工作 outputs 0 1 2 3 from multiprocessing import Pool def run one x print x return poo
  • Heroku PG:恢复已撤销的写入权限

    我有过一次Write access revoked在我的 Heroku 开发计划中 因为我的数据库中有太多行 这是我得到的结果 heroku pg info HEROKU POSTGRESQL WHITE URL DATABASE URL
  • 不支持将桥接标头与模块接口一起使用命令 CompileSwiftSources 失败并出现非零退出代码

    我的项目中有 razor pay pod 用于支付网关SWRevelViewController侧栏控制器的文件 我选择了 swift 5 和 iOS 版本 13 并更新了所有 pod 但仍然出现错误 错误 不支持将桥接标头与模块接口一起使
  • 使用异常来验证输入

    我试图检查用户传递的值是否是有效的常量 这是我写的代码 enum Media Delivery Streaming Progressive public class TestMain public static void main Stri
  • 不同库的不同结果和性能

    我正在比较图书馆距离 fastdtw and cdtw用于 DTW 计算 这是我的代码 from fastdtw import fastdtw from cdtw import pydtw import fastdtw import arr
  • 检查和可视化大型数据框中的间隙/空白和结构

    我有一个大型数据框 400000 x 50 我想目视检查其结构和空白 间隙 是否有现有的库或 ggplot2 函数可以输出如下图片 其中红色可能是 日期 蓝色可能是 因素 绿色可能是 字符 黑色可能是空白 NA 你有没有尝试过dfviewr
  • 如何在快速失败模式下使用 Python unittest 模块中的 TextTestRunner 类?

    我在文档中找到的所有内容unittest模块是描述 of TextTestRunner的构造函数以及使用其的以下示例代码run 方法 unittest TextTestRunner verbosity 2 run suite 我想知道如何使
  • 使用 ggplot2 对每个因子内的条形进行排序

    我正在创建这个 条形图 ggplot 但我希望能够对每个类别中的条形图重新排序 以便最高的条形图位于顶部 简而言之 每个类别内都有从高到低的条形排序 以下是我的代码 欢迎任何提示 谢谢 library ggplot2 d lt read c
  • UISearchBar \ UISearchDisplayViewController 的问题

    我在 iOS 7 上使用 SearchDisplayViewController 时遇到了困难 我有一个隐藏在 UITableViewController 上的 searchBar 比如 self tableView tableHeader
  • 不可变对象的线程安全性如何?

    大家都说不可变对象是线程安全的 但这是为什么呢 以在多核 CPU 上运行的以下场景为例 核心 1 读取内存位置的对象0x100并且缓存在Core 1的L1 L2缓存中 GC 会在该内存位置收集该对象 因为它已变得符合条件并且0x100变得可
  • 如何知道写时复制页面是否是实际副本?

    当我使用 mmap 创建写时复制映射 MAP PRIVATE 时 一旦我写入特定地址 该映射的某些页面就会被复制 在我的程序中的某个时刻 我想弄清楚哪些页面实际上已被复制 有一个称为 mincore 的调用 但它仅报告页面是否在内存中 这与
  • CreateProcessW 是否已弃用?

    我找不到准确的答案 所以我决定问一下 我一直在阅读 Windows 调试内部 在示例中它告诉我在kernel32 CreateProcessW 但在此之前它使用 symfixdebugger 命令将调试器符号搜索路径设置为指向 Micros
  • SKProductsRequest 未返回任何产品

    这是我第一次尝试 但我遇到了获取产品列表的障碍 我创建了一个临时配置文件 例如 com mycompany myproduct 以及 iTunes connect 上的附加功能 例如 com mycompany myproduct feat
  • 将 XPATH 谓词与位置结合起来

    我有一个具有该类的 div 元素的集合media gallery item 我想选择元素号 x 当只选择所有项目时 我得到 5 个结果 x div id content area div class media gallery item 现
  • Sass (.scss) 文件的 Aptana Studio 3 代码辅助

    我正在使用 Aptana Studio 3 我希望获得适用于 Sass scss 文件的代码辅助功能 如果代码辅助不适用于 Sass 语法 声明 也没关系 但我希望获得标准 CSS 声明的语法突出显示和代码完成帮助 例如 如果我输入 bac
  • 在Python中从IP地址和掩码长度获取IP掩码

    给定一个以点分四元表示法表示的 IP 地址 例如 192 192 45 1掩码长度通常为 8 16 24 但也可以是任何长度 即 17 有人可以提供 python 代码来计算子网掩码吗 最好是我 可以获得 32 位整数的结果 以便很容易进行
  • 如何从现有窗口创建新的 PyQt4 窗口?

    我一直在尝试使用 python3 和 Qt4 从现有窗口调用新窗口 我已经使用 Qt Designer 创建了两个窗口 主应用程序和另一个窗口 并且我已将 Qt Designer 生成的 ui 文件转换为 py 脚本 但我似乎无法从主应用程