我用谷歌搜索了很长时间,我无法找到解决问题的方法。
我正在尝试创建一个窗口,您可以在其中显示另一个窗口小部件的多个实例,就像您在图片中看到的那样。小部件应该是您可以使用它们管理的不同上传。这是我写的代码和
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_())
Widget和MainWindow
它应该如何看待
感谢您的帮助
的Lennard
答案 0 :(得分: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_()
您在addWidget()
而不是QWidget
上使用QLayout
时会误认为是错误的。最容易修复的部分是,为您的小部件添加布局:
vLayout = QVBoxLayout ()
UploadArea.setLayout( vLayout )
vLayout.addWidget( loadUi( 'your_file.ui' ) )
请向我们提供反馈意见,如果出现问题,请告诉我们traceback-print