PyQt6首列固定宽度、表格随窗口拉伸布局问题求助
PyQt6多标签窗口布局问题解决
问题根源
你当前的布局问题主要出在这几点:
- 多余的
stacklayout被加入主布局但未实际使用,挤占了布局空间 - 没有给左列筛选控件设置固定宽度约束,反而在表格后添加
addStretch(1),导致表格被挤压固定,无法随窗口扩展 - 左列
grid_layout里的setColumnStretch(3,1)完全无效,因为布局中根本没有第3列
解决思路与修改方案
核心逻辑是:给左列设置固定宽度约束,让表格占据窗口剩余全部空间,并配置表格自身的自适应属性。以下是修改后的完整代码及关键说明:
import sys from PyQt6 import QtWidgets from PyQt6.QtCore import Qt class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("My App") self.tabs = QtWidgets.QTabWidget() self.tabs.setTabPosition(QtWidgets.QTabWidget.TabPosition.North) self.tabs.setMovable(False) # Tab 1 self.tab_1 = QtWidgets.QWidget() self.tabs.addTab(self.tab_1, "tab_1") self.tab_1_func() self.setCentralWidget(self.tabs) def tab_1_func(self): """ Overview """ # 左列筛选控件布局 grid_layout = QtWidgets.QGridLayout() # 主布局:水平分布左列和表格 page_layout = QtWidgets.QHBoxLayout(self.tab_1) # 移除无用的stacklayout,避免干扰布局 # self.tab_1.stacklayout = QtWidgets.QStackedLayout() # page_layout.addLayout(self.tab_1.stacklayout) # # Left Column - Buttons, filters etc # widget_box = QtWidgets.QComboBox() widget_box.addItems(['Country', 'Capital', 'Street']) grid_layout.addWidget(widget_box, 0, 0) widget_filter = QtWidgets.QLineEdit() widget_filter.setPlaceholderText("Enter your text") grid_layout.addWidget(widget_filter, 0, 1) # 将左列布局包裹到独立widget中,设置固定宽度 left_widget = QtWidgets.QWidget() left_widget.setLayout(grid_layout) left_widget.setFixedWidth(300) # 固定左列宽度,可按需调整 left_widget.setContentsMargins(0,0,20,0) # 右间距,和表格区分开 # # 表格部分 # data = [ ('France', 'Paris', 'Rue de X'), ('United Kingdom', 'London', 'Road X'),
相关产品推荐
相关产品推荐

