首页 文章

将窗口小部件插入另一个窗口

提问于
浏览
0

我google了很长时间,我无法找到解决问题的方法 .

我正在尝试创建一个窗口,您可以在其中显示另一个窗口小部件的多个实例,就像您在图片中看到的那样 . 小部件应该是您可以使用它们管理的不同上传 . 这是我写的代码和

self.UploadArea.addWidget(uic.loadUi('gui_files/module.ui'))

应该在名为“UploadArea”的QWidget中打开Widget,它可能被编码为垃圾并没有任何意义,但如果你能告诉我一个优雅的问题答案那就太好了 .

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args):
        super(MainWindow, self).__init__(*args)
        uic.loadUi('gui_files/mainWindow.ui', self)

        self.upload.clicked.connect(self.buttonClicked)

    def buttonClicked(self):
        print("Test")
        self.UploadArea.addWidget(uic.loadUi('gui_files/module.ui'))


app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

小部件和MainWindow

怎么看

谢谢您的帮助

伦纳德

1 回答

  • 0

    你很接近 - 你可以创建一个 QWidget 的多个实例,然后将它们添加到你的QMainWindow . 这是一个最小的工作示例:

    from PyQt5.QtWidgets import *
    from PyQt5.uic import loadUi
    
    class SubWidget( QWidget ) :
        def __init__ ( self, parent = None ) :
            super( SubWidget, self ).__init__( parent )
            button = QPushButton( 'toggle' )
            checkbox = QCheckBox( 'check' )
            button.clicked.connect( checkbox.toggle )
            hLayout = QHBoxLayout( self )
            hLayout.addWidget( button )
            hLayout.addWidget( checkbox )
            self.setLayout( hLayout )
    
    class Window( QMainWindow ) :
        def __init__ ( self, parent = None ) :
            super( Window, self ).__init__( parent )
            # loadUi( 'main-something.ui', self )
            button = QPushButton( 'add' )
            button.clicked.connect( self.add )
            self.vLayout = QVBoxLayout( self )
            self.vLayout.addWidget( button )
            centralWidget = QWidget()
            centralWidget.setLayout( self.vLayout )
            self.setCentralWidget( centralWidget )
    
        def add ( self ) :
            self.vLayout.addWidget( SubWidget( self ) )
            # self.vLayout.addWidget( loadUi( 'sub-something.ui', self ) )
    
    if __name__ == "__main__" :
        app = QApplication( [] )
        w = Window()
        w.show()
        app.exec_()
    

    您在 QWidget 上使用 addWidget() 而不是 QLayout 时会误认为是错误的 . 最容易修复的部分是,为您的小部件添加布局:

    vLayout = QVBoxLayout ()
     UploadArea.setLayout( vLayout )
     vLayout.addWidget( loadUi( 'your_file.ui' ) )
    

    请给我们反馈,如果出现问题,请告诉我们traceback-print

相关问题