代码之家  ›  专栏  ›  技术社区  ›  mohammad bagher Malekhosseini

如何在其他表单中使用qt Designer中生成的表单

  •  0
  • mohammad bagher Malekhosseini  · 技术社区  · 6 年前

    我用Qt设计器创建了一个表单,并将其转换为python\u file1。py使用Pyuc5。 python\u文件1中的代码。py以以下语句开头:

    from PyQt5 import QtCore, QtGui, QtWidgets
    class Ui_Frame(object):
       def setupUi(self, Frame):
           Frame.setObjectName("Frame")
    ...
    

    当我通过以下语句在主窗口窗体中使用此窗体作为小部件时:

    from python_file import Ui_Frame as page_frame
    ...
    class AppWindow(QMainWindow):
    def __init__(self):
       self.my_page =page_frame()
       ...
    

    它会出现以下错误:

    Frame.setObjectName("Frame")
    AttributeError: 'Ui_Frame' object has no attribute 'setObjectName'
    

    如果我编辑python\u文件1。复制到此:

    from PyQt5 import QtCore, QtGui, QtWidgets
    class Ui_Frame(QtWidgets.QFrame):
       def setupUi(self, Frame):
           Frame.setObjectName("Frame")
    ...
    

    一切都很好。 python\u文件1。py自动生成,PyQt5 UI代码生成器将丢失此文件中所做的所有更改!如何在不编辑python\u文件1的情况下更正此错误。py。

    1 回复  |  直到 6 年前
        1
  •  0
  •   mohammad bagher Malekhosseini    6 年前

    非常感谢eyllanesc。你的回答有点变化。我按照中所述进行更改 http://pyqt.sourceforge.net/Docs/PyQt5/designer.html

    from PyQt5.QtWidgets import QFrame, QMainWindow
    from python_file import Ui_Frame
    class Page_Frame(QFrame, Ui_Frame):
       def __init__(self, *args, **kwargs):
         super(Page_Frame, self).__init__()
         # QFrame.__init__(self, *args, **kwargs)
         self.setupUi(self)
    
    class AppWindow(QMainWindow):
    def __init__(self):
       self.my_page = Page_Frame()
       ...