自己用PySide写Qt页面遇到了点问题
我自定义了QTableWidget的样式表,水平和垂直表头的背景色都设置了,但是在没有添加行和列的时候他们的背景色还是白色的
我在网上找了半天没找到如何设置那部分的颜色
水平表头设置了宽度自适应所以没问题,但是这个垂直表头如果也设置自适应的话会导致每行高度都巨高
具体请看下面的样式表和图
有没有big佬帮帮我啊
class TableWidget(QTableWidget):
style: str = '''
QTableWidget {{
outline: none;
border: none;
border-radius: {_radius}px;
gridline-color: {_border_color};
padding: 5px;
font: {_font_size}pt {_font_family};
}}
QTableWidget:enabled {{
border-color: {_border_color};
color: {_color};
background-color: {_background_color};
}}
QTableWidget:disabled {{
border-color: {_border_color_disabled};
color: {_color_disabled};
background-color: {_background_color_disabled};
}}
QTableWidget::item {{
border: none;
margin: 0px;
padding: 1px 5px 1px 5px;
}}
QTableWidget::item:hover {{
background-color: {_background_color_hover};
border: 1px solid {_border_color_hover};
}}
QTableWidget::item:selected {{
color: {_color_selected};
background-color: {_background_color_selection};
}}
QTableWidget::item::selected:active {{
background-color: {_background_color_active};
}}
QHeaderView::section {{
background-color: {_background_color};
border: none;
border-bottom: 1px solid {_border_color};
border-right: 1px solid {_border_color};
min-width: 20px;
}}
QHeaderView::section:horizontal {{
border: none;
border-bottom: 1px solid {_border_color};
border-right: 1px solid {_border_color};
background-color: {_header_horizontal_color};
padding-top: 3px;
padding-bottom: 3px;
}}
QHeaderView::section:vertical {{
color: {_color_active};
font: {_font_size}pt {_font_family};
border: none;
border-bottom: 1px solid {_border_color};
background-color: {_header_vertical_color};
padding-left: 5px;
padding-right: 5px;
}}
QTableWidget QTableCornerButton::section {{
border: none;
border-bottom: 1px solid {_border_color};
background-color: {_header_horizontal_color};
padding: 3px;
border-top-left-radius: {_radius}px;
}}
'''
问题已经解决,我把所有的样式表都删除然后一个个添加后测试样式变化,发现 QTableWidget 的样式表只能表示表格区域,他是不包含横纵标题栏的。同样的,使用 QHeaderView::section:horizontal 以及 QHeaderView::section:vertical 设置的标题栏样式也不包含超出表格范围的部分。
只设置 QTableWidget 背景色:
再设置 QHeaderView::section:horizontal 以及 QHeaderView::section:vertical 背景色:
可见剩下的白色区域并不归我所设置的这些样式表管!于是我放弃了复杂的样式表,只写了一行 background-color: #444444 发现这样是可以设置全部区域的背景色的,所以问题肯定是我的自定义样式表缺一部分,那么究竟是哪一部分呢??最后还得回到面向对象编程的本质上来,QTableWidget 是官方提供的对 QTableView 封装后的一个组件,那么白色区域会不会属于它当中包含的子组件?答案是肯定的,和我们自己自定义小组件的做法一样,QTableWidget 也是将子组件放到了一个 QWidget 中,我在样式表中加入对 QWidget 背景色的设置,不出所料白色区域消失。
最后把列宽自适应 self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) 加上,终于得到了我想要的效果。
如果是动态添加数据的话,需要从代码里实现的这个行号功能。操作完数据后要更新一下界面