当PyQt中窗口大小减小时,所有小部件都会消失

时间:2018-01-22 16:37:42

标签: python pyqt pyqt4

当我减小窗口大小时,所有小部件都会消失。我希望小部件在大小减小时移动。我如何解决这个问题?

我有一个下拉菜单,从中选择一个值。当按下“添加cmd”按钮时,该值将被添加到编辑框中。

提前致谢。

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class tabdemo(QTabWidget):
   def __init__(self, parent = None):
        super(tabdemo, self).__init__(parent)
        self.setGeometry(50, 50, 400,400)

        QShortcut(QKeySequence("Esc"), self, self.close)
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.addTab(self.tab1,"Tab 1")
        self.tab1UI()
        self.setWindowTitle("Main Window")

   def tab1UI(self):
        self.comboBox = QComboBox(self.tab1)    
        self.comboBox.addItem('ABC')        
        self.comboBox.addItem('BCD')
        self.comboBox.addItem('CDE')
        self.comboBox.move(5,20)
        self.comboBox.resize(180,30)    

        self.button = QPushButton('Add Cmd', self.tab1)
        self.button.move(190,20)
        self.button.resize(80,30)   
        self.button.clicked.connect(self.handleTest)

        self.b = QTextEdit(self.tab1)
        self.b.move(20,75)
        self.b.resize(290,200)

        self.button = QPushButton('Send Batch', self.tab1)
        self.button.move(40,300)
        self.button.resize(150,30)  

        self.button = QPushButton('Clear', self.tab1)
        self.button.move(200,300)
        self.button.resize(80,30)   
        self.button.clicked.connect(self.deletevalue)   

        layout = QFormLayout()
        self.setTabText(4,"BatchCMDS")
        self.tab1.setLayout(layout)

   def handleTest(self):
        self.b.append(str(self.comboBox.currentText()))         

   def deletevalue(self):
        self.b.clear()

def main():
   app = QApplication(sys.argv)
   ex = tabdemo()
   ex.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

1 个答案:

答案 0 :(得分:1)

如果您希望窗口小部件适应窗口的大小,则应使用layouts,为此,必须设计应用程序,为此,将使用您希望应用程序的图像: / p>

enter image description here

我们看到标签内的小部件分为3组,第一组由QComboBoxQPushButton组成,第二组由QTextEdit组成,第三个剩下的2个按钮。每个组都是水平分布的,因此在这种情况下我们应该使用除QTextEdit之外的QHBoxLayout,并且每个组都应该在QVBoxLayout中。我不明白为什么你使用QFormLayout,如果你使用布局,也不需要这些位置。

我在代码中看到的另一个错误是几个按钮具有相同的名称,这会导致错误,例如Add CMD按钮不起作用,您必须为每个小部件指定不同的名称。

class tabdemo(QTabWidget):
    def __init__(self, parent = None):
        super(tabdemo, self).__init__(parent)
        self.setGeometry(50, 50, 400,400)

        QShortcut(QKeySequence("Esc"), self, self.close)
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.addTab(self.tab1,"Tab 1")
        self.addTab(self.tab2,"Tab 2")
        self.tab1UI()

    def tab1UI(self):
        vlayout = QVBoxLayout(self.tab1)

        hlayout1 = QHBoxLayout()
        self.comboBox = QComboBox(self.tab1)    
        self.comboBox.addItems(['ABC', 'BCD', 'CDE'])

        self.button = QPushButton('Add Cmd', self.tab1)
        self.button.clicked.connect(self.handleTest)

        hlayout1.addWidget(self.comboBox)
        hlayout1.addWidget(self.button)
        hlayout1.addItem(QSpacerItem(100, 10, QSizePolicy.Expanding, QSizePolicy.Preferred))

        vlayout.addLayout(hlayout1)

        self.b = QTextEdit(self.tab1)
        vlayout.addWidget(self.b)

        hlayout2 = QHBoxLayout()

        self.buttonSend = QPushButton('Send Batch', self.tab1)
        self.buttonClear = QPushButton('Clear', self.tab1)
        self.buttonClear.clicked.connect(self.deletevalue)

        hlayout2.addItem(QSpacerItem(100, 10, QSizePolicy.Expanding, QSizePolicy.Preferred))
        hlayout2.addWidget(self.buttonSend)
        hlayout2.addWidget(self.buttonClear)
        hlayout2.addItem(QSpacerItem(100, 10, QSizePolicy.Expanding, QSizePolicy.Preferred))

        vlayout.addLayout(hlayout2)
        self.setTabText(4,"BatchCMDS")

    def handleTest(self):
        self.b.append(self.comboBox.currentText())         

    def deletevalue(self):
        self.b.clear()