Python 如何在PyQt5中为任何小部件设置固定大小,而不在调整大小时破坏布局
我在任何地方都没有发现这个确切的问题,或者我只是不认识其他人。作为一名编程新手,我还没有完全忘记,我正在尝试用PyQt5创建一个应用程序,但在将来进行任何更严肃的编码之前,我很难正确设置布局 正如您将看到的,我正试图使用一个QHBoxLayout来完成我的主布局,其中包含两个QVBoxLayout布局。我在每个垂直布局中都加入了一些随机的小部件,这些小部件可以独立工作,除非我尝试给它们一个固定的大小。当给定固定的宽度/高度/大小时,左垂直布局中的ListWidget和LineEdit不会停留在我想要的位置,也不会停留在我想要的方式,一旦我手动调整应用程序windon的大小,如图所示。显然,我希望它们保持在左上角,任何后续的小部件都位于第一个、第二个等的右下角。每当我尝试应用相同的标签时,tabswidget也会发生同样的情况 我曾经玩弄过几何、尺寸点、对齐等等,但我似乎无法理解。 附上问题的两张图片的链接: 并附上代码的重要部分:Python 如何在PyQt5中为任何小部件设置固定大小,而不在调整大小时破坏布局,python,layout,pyqt5,qvboxlayout,Python,Layout,Pyqt5,Qvboxlayout,我在任何地方都没有发现这个确切的问题,或者我只是不认识其他人。作为一名编程新手,我还没有完全忘记,我正在尝试用PyQt5创建一个应用程序,但在将来进行任何更严肃的编码之前,我很难正确设置布局 正如您将看到的,我正试图使用一个QHBoxLayout来完成我的主布局,其中包含两个QVBoxLayout布局。我在每个垂直布局中都加入了一些随机的小部件,这些小部件可以独立工作,除非我尝试给它们一个固定的大小。当给定固定的宽度/高度/大小时,左垂直布局中的ListWidget和LineEdit不会停留在我
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.initUI()
self.createactions()
self.createmenus()
self.createtoolbar()
self.container = FrameContainer()
self.setCentralWidget(self.container)
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(100,100,800,600)
self.statusBar().showMessage("Statusbar - awaiting user control")
self.show()
class FrameContainer(QWidget):
def __init__(self):
super(QWidget, self).__init__()
self.setContentsMargins(0,0,0,0)
self.mainlayout = QHBoxLayout(self)
self.mainlayout.setSpacing(0)
self.mainlayout.setContentsMargins(0, 0, 0, 0)
self.verticalwidgets()
self.mainlayout.addLayout(self.box_layout1)
self.mainlayout.addLayout(self.box_layout2)
def verticalwidgets(self):
# Left side
self.box_layout1 = QVBoxLayout()
self.box_layout1.setContentsMargins(0,0,0,0)
self.box_layout1.setSpacing(0)
self.list_widget = QListWidget()
self.list_widget.setFixedSize(200,500)
self.list_widget.sizeHintForColumn(0)
self.someWidget3 = QLineEdit()
self.someWidget3.setFixedWidth(200)
self.box_layout1.addWidget(self.list_widget, Qt.AlignLeft)
self.box_layout1.addWidget(self.someWidget3, Qt.AlignLeft)
# Right side
self.box_layout2 = QVBoxLayout()
self.box_layout2.setContentsMargins(0,0,0,0)
self.box_layout2.setGeometry(QRect(0, 0, 800, 680))
self.tabs_widget = TabsWidget(self)
self.box_layout2.addWidget(self.tabs_widget)
class TabsWidget(QWidget):
def __init__(self, child):
super(QWidget, self).__init__()
self.layout = QHBoxLayout(self)
self.layout.setContentsMargins(0,0,0,0)
self.tabs = QTabWidget()
self.tabs.setTabsClosable(True)
self.tab1 = QWidget()
self.tab2 = QWidget()
self.tab3 = QWidget()
# Add tabs
self.tabs.addTab(self.tab1, "Tab 1")
self.tabs.addTab(self.tab2, "Tab 2")
self.tabs.addTab(self.tab3, "Tab 3")
# Create first tab
self.tab1.layout = QVBoxLayout(self)
self.pushButton1 = QPushButton("Button 1")
self.pushButton2 = QPushButton("Button 2")
self.pushButton3 = QPushButton("Button 3")
self.tab1.layout.addWidget(self.pushButton1)
self.tab1.layout.addWidget(self.pushButton2)
self.tab1.layout.addWidget(self.pushButton3)
self.tab2.layout = QVBoxLayout(self)
self.tab2.layout.addWidget(QLabel("Peterpaned"))
self.tab2.layout.addWidget(QLineEdit())
self.tab1.setLayout(self.tab1.layout)
self.tab2.setLayout(self.tab2.layout)
# Add tabs to widget
self.layout.addWidget(self.tabs)
我做错了什么?不必给我代码答案,除非你愿意,否则我想,或者至少我希望,朝着正确的方向用力推一下就可以了。你可以在布局中添加间隔符(水平或垂直,取决于放置位置),并为它们设置非固定大小的策略。这样,每当调整窗口大小时,只有间隔条会拉伸(或缩短)。它起作用了!如果需要适当添加布局等,我假设它也可以在tabs小部件内部工作。?