当 window 大小减小时,所有小部件都会消失

All the widgets disappear when window size is decreased

当我减小 window 尺寸时,所有小部件 disappear.I 都希望小部件在尺寸为 decreased.How 时移动,我可以解决这个问题吗?

我有一个下拉菜单,其中的值是 selected.When 按下 "Add 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()

如果您希望小部件适应 window 的大小,您应该使用 layouts,为此,必须设计应用程序,为此使用您想要的图像您的申请是:

正如我们所见,选项卡内的小部件分为 3 组,第一组由 QComboBoxQPushButton 组成,第二组由 QTextEdit 组成,第三个是剩下的两个按钮。每个组都是水平分布的,所以在这种情况下我们应该使用 QHBoxLayout 除了 QTextEdit 是单独的,每个组应该在 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()