2

我得到了以下测试 GUI。

有一个左侧布局和一个右侧布局,我想在其中放置按钮和其他东西。右侧的按钮应该使 QFrame 取消隐藏或隐藏以及其中的所有小部件。这行得通。

但是在前两次点击之后,布局就不同了。左侧布局上的 TableWidget 被调整大小,按钮更靠南一些。

有没有简单的方法来解决这个问题?

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        self.main_widget = MainWidget()
        self.setCentralWidget(self.main_widget)
        self.show()


class MainWidget(QWidget):
    def __init__(self):
        super().__init__()

        self.layout = QVBoxLayout()

        self.tab_widget = TabWidget()

        self.debugger = Dialog()

        self.layout.addWidget(self.tab_widget)
        self.layout.addWidget(self.debugger)

        self.setLayout(self.layout)


class TabWidget(QTabWidget):
    def __init__(self):
        super().__init__()
        self.tab1 = Tab_1()
        self.addTab(self.tab1, "Tab1")


class Tab_1(QWidget):

    def __init__(self):
        super().__init__()

        # LEFT LAYOUT BEGIN
        self.table = QTableWidget()
        self.table.setRowCount(1)
        self.table.setColumnCount(2)
        self.table.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents)
        self.table.resizeColumnsToContents()

        left_hlayout = QHBoxLayout()
        left_hlayout.addWidget(self.table)

        #       # LEFT LAYOUT END
        #
        #       # RIGHT LAYOUT BEGIN

        self.button_options = QPushButton('Options')
        self.button_options.setCheckable(True)
        self.button_options.toggled.connect(self.option_pressed)
        right_vlayout = QVBoxLayout()
        right_vlayout.addWidget(self.button_options)

        #       # RIGHT LAYOUT END

        # MAIN LAYOUT BEGING

        self.main_layout = QVBoxLayout()
        self.horizontal_layout = QHBoxLayout()
        self.horizontal_layout.addLayout(left_hlayout)
        self.horizontal_layout.addLayout(right_vlayout)
        self.main_layout.addLayout(self.horizontal_layout)
        self.option = Options()
        self.main_layout.addWidget(self.option)
        self.setLayout(self.main_layout)

    # MAIN LAYOUT END

    def option_pressed(self):
        if self.button_options.isChecked():
            self.option.setVisible(True)
        else:
            self.option.setVisible(False)


class Options(QFrame):
    def __init__(self):
        super().__init__()
        self.hide()
        self.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)
        self.options_layout = QFormLayout()
        self.options_label = QLabel('One')
        self.options_lineedit = QLineEdit('Two')
        self.options_layout.addRow(self.options_label, self.options_lineedit)
        self.setLayout(self.options_layout)


class Dialog(QPlainTextEdit):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setFixedHeight(100)
        pal = QPalette()
        bgc = QColor(210, 210, 210)
        pal.setColor(QPalette.Base, bgc)
        self.setPalette(pal)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())
4

0 回答 0