2016-10-13 166 views
0

在任何地方都没有发现这个确切的问题,或者我只是不认识他人。尽管在编程方面还是一个初学者,但并不是完全没有意义,我试图用PyQt5创建一个应用程序,但是我在未来进行更严肃的编码之前无法正确设置布局。如何在PyQt5中为任何小部件设置固定大小而不打破布局时调整大小

正如你将会看到的,我试图通过使用QHBoxLayout和两个QVBoxLayout布局来完成我的主布局。我在每个垂直布局中抛出了一些随机小部件,除了当我尝试给他们一个固定的大小时,它们自己完美地工作。左侧垂直布局中的ListWidget和LineEdit不会保留在我希望它们成为的位置,或者当我给出固定的宽度/高度/大小时,我手动调整应用的windon大小(如图中所示)时,我想要它们。很显然,我希望它们能够保持在第一个,第二个等等之下的任何位置。当我尝试应用它时,与tabswidget发生同样的事情。

我玩过几何,大小提示,路线等,但我似乎无法弄清楚。 内附链接到问题的两个图片:

before resizing

after resizing

并包围代码的重要组成部分:

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) 

我在做什么错?不必一定要给我代码的答案,除非你有这种想法,否则我会认为正确的方向是一种严肃的推动,或者至少我希望这样做。

回答

1

您可以在布局中添加分隔符(水平或垂直,取决于放置的位置)并为它们设置非固定大小的策略。这种方式每当窗口被调整大小时,只有间隔符会拉伸(或缩短)。

+0

它的工作!我认为它可以在标签小部件内部工作,如果需要适当添加布局等。 – JackTheCrab

相关问题