为了账号安全,请及时绑定邮箱和手机立即绑定

在代码中运行由设计器制作的 QTabWidget

在代码中运行由设计器制作的 QTabWidget

慕尼黑的夜晚无繁华 2022-01-05 13:26:37
我创建了带有选项卡的 GUI,每个选项卡(如 Chrome)的不同视图是我的应用程序与设计器所需的。现在我在用我的 Python 代码运行它时遇到了问题。在我使用 MainWindow 之前,它工作正常,但在使用新的 .ui 数据后,它不再工作了。我尝试了与 MainWindow 相同的方法,但似乎没有 Ui_tabWidget。我可能弄错了 ui 的设置是如何工作的,所以我尝试了一些与 MainWindow 一起工作的东西。对于主窗口:class MyForm(QMainWindow):    def __init__(self):        super().__init__()        self.ui = Ui_MainWindow()        self.ui.setupUi(self)        self.show()if __name__ == "__main__":    app = QApplication(sys.argv)    w = MyForm()    w.show()    sys.exit(app.exec_())对于 TabWidget:class MyForm(QTabWidget):    def __init__(self):        super().__init__()        self.ui = Ui_MainWindow() #or Ui_TabWidget which doesnt exist        self.ui.setupUi(self)        self.show()if __name__ == "__main__":    app = QApplication(sys.argv)    w = MyForm()    w.show()    sys.exit(app.exec_())
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

当您使用 Qt Designer 时,您必须使用基于 QTabWidget 的设计,您必须在Widgets部分选择它:


//img1.sycdn.imooc.com//61d52c2900012c5d05320426.jpg

生成的 .ui 如下:


tabwidget.ui


<?xml version="1.0" encoding="UTF-8"?>

<ui version="4.0">

 <class>TabWidget</class>

 <widget class="QTabWidget" name="TabWidget">

  <property name="geometry">

   <rect>

    <x>0</x>

    <y>0</y>

    <width>400</width>

    <height>300</height>

   </rect>

  </property>

  <property name="windowTitle">

   <string>TabWidget</string>

  </property>

 </widget>

 <resources/>

 <connections/>

</ui>

然后您必须将 .ui 转换为 .py:


pyuic5 tabwidget.ui -o tabwidget_ui.py -x

生成以下 tabwidget_ui.py:


# -*- coding: utf-8 -*-


# Form implementation generated from reading ui file 'tabwidget.ui'

#

# Created by: PyQt5 UI code generator 5.12.1

#

# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets



class Ui_TabWidget(object):

    def setupUi(self, TabWidget):

        TabWidget.setObjectName("TabWidget")

        TabWidget.resize(400, 300)


        self.retranslateUi(TabWidget)

        QtCore.QMetaObject.connectSlotsByName(TabWidget)


    def retranslateUi(self, TabWidget):

        _translate = QtCore.QCoreApplication.translate

        TabWidget.setWindowTitle(_translate("TabWidget", "TabWidget"))





if __name__ == "__main__":

    import sys

    app = QtWidgets.QApplication(sys.argv)

    TabWidget = QtWidgets.QTabWidget()

    ui = Ui_TabWidget()

    ui.setupUi(TabWidget)

    TabWidget.show()

    sys.exit(app.exec_())

然后将其导入到 main.py 中:


主文件


from PyQt5 import QtWidgets


from tabwidget_ui import Ui_TabWidget



class TabWidget(QtWidgets.QTabWidget):

    def __init__(self):

        super().__init__()

        self.ui = Ui_TabWidget()

        self.ui.setupUi(self)



if __name__ == "__main__":

    import sys

    app = QtWidgets.QApplication(sys.argv)

    w = TabWidget()

    w.show()

    sys.exit(app.exec_())

最后,该文件夹将包含以下文件:


├── main.py

├── tabwidget.ui

└── tabwidget_ui.py


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信