鱼C论坛

 找回密码
 立即注册
查看: 3889|回复: 19

关于qtable widget中滚动条的设置问题?

[复制链接]
发表于 2020-9-20 20:41:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 差不多先生air 于 2020-9-20 21:14 编辑

我设置了两个table widget,一个做表头,一个做接收表格内容,然后出现了以下的问题:

滚动条不高的时候,上下的表格是可以对齐的,滚动条滑到最右边表格标题和内容单元格无法对齐的问题

我的问题就像我再网上找的这个图片一样:
351(J`~[N[~IYPPQ3QJC0`7.png

我想改成如下图所示的效果,请问一下,应该怎么操作???
%Y2C$QX@R%WEUDSEH3`KQ.png


这是我在网上找的一个类似的帖子,但是不知道怎么修改。https://www.cnblogs.com/xrab/p/7479527.html
import pandas as pd
import numpy as np
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys

class Ui_MainWindow(QMainWindow):

    def __init__(self):
        super(QtWidgets.QMainWindow, self).__init__()
        self.setupUi(self)
        self.retranslateUi(self)

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(795, 605)
        #MainWindow.setFixedSize(MainWindow.width(), MainWindow.height())  #禁止拉伸窗口大小
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.retranslateUi(MainWindow)

        MainWindow.setCentralWidget(self.centralWidget)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.pushButton_6 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_6.setGeometry(QtCore.QRect(480, 487, 75, 23))
        self.pushButton_6.setObjectName("pushButton_6")
        self.pushButton_6.setText("列表打开")

        self.pushButton_6.clicked.connect(self.open_excel)

        self.tableWidget = QtWidgets.QTableWidget(self.centralWidget)
        self.tableWidget.setGeometry(QtCore.QRect(10, 200, 772, 250))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(0)
        self.tableWidget.setRowCount(0)
        self.tableWidget.setFrameShape(QtWidgets.QFrame.NoFrame)   #设置没有边框
        self.tableWidget.setStyleSheet("selection-background-color:pink")
        self.tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked)
        self.tableWidget.raise_()

        self.tableWidget_1 = QtWidgets.QTableWidget(self.centralWidget)
        self.tableWidget_1.setGeometry(QtCore.QRect(10, 124, 772, 76))
        self.tableWidget_1.setObjectName("tableWidget_1")
        self.tableWidget_1.setColumnCount(0)
        self.tableWidget_1.setRowCount(0)
        self.tableWidget_1.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.tableWidget_1.setStyleSheet("selection-background-color:pink")
        self.tableWidget_1.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.tableWidget_1.verticalHeader().setVisible(False)  # 隐藏垂直表头
        self.tableWidget_1.horizontalHeader().setVisible(False)  # 隐藏水平表头
        self.tableWidget_1.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)   #隐藏垂直滚动条
        self.tableWidget_1.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)  #隐藏水平滚动条

        ###===========连接两个tablewidget的水平滚动条==========================================
        self.tableWidget.horizontalScrollBar().valueChanged.connect(self.setValue)

    def setValue(self):
        self.tableWidget_1.horizontalScrollBar().setValue(self.tableWidget.horizontalScrollBar().value())
        ###===========连接两个tablewidget的水平滚动条==========================================

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "综合测试平台"))

    def open_excel(self):
        openfile_name = QFileDialog.getOpenFileName(self, '选择文件', '', 'Excel files(*.xlsx , *.xls)')
        global path_openfile_name
        path_openfile_name = openfile_name[0]

        self.tableWidget_1.setColumnCount(12)
        self.tableWidget_1.setRowCount(2)

        ###===========前面两个数字代表坐标,后面两个数字代表合并的行列数==========================================
        self.tableWidget_1.setSpan(0, 0, 2, 1)
        self.tableWidget_1.setSpan(0, 1, 2, 1)
        self.tableWidget_1.setSpan(0, 2, 2, 1)
        self.tableWidget_1.setSpan(0, 3, 2, 1)
        self.tableWidget_1.setSpan(0, 4, 2, 1)
        self.tableWidget_1.setSpan(0, 5, 2, 1)
        self.tableWidget_1.setSpan(0, 6, 1, 3)
        self.tableWidget_1.setSpan(0, 9, 1, 3)
        ###===========前面两个数字代表坐标,后面两个数字代表合并的行列数==========================================

        newItem_1 = QTableWidgetItem("文件名")
        self.tableWidget_1.setItem(0, 0, newItem_1)
        newItem_1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_2 = QTableWidgetItem("开关型号")
        self.tableWidget_1.setItem(0, 1, newItem_2)
        newItem_2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_3 = QTableWidgetItem("开关编号")
        self.tableWidget_1.setItem(0, 2, newItem_3)
        newItem_3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_4 = QTableWidgetItem("实验日期")
        self.tableWidget_1.setItem(0, 3, newItem_4)
        newItem_4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_5 = QTableWidgetItem("操作类型")
        self.tableWidget_1.setItem(0, 4, newItem_5)
        newItem_5.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_6 = QTableWidgetItem("操作电压")
        self.tableWidget_1.setItem(0, 5, newItem_6)
        newItem_6.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_7 = QTableWidgetItem("合闸时间(ms)")
        self.tableWidget_1.setItem(0, 6, newItem_7)
        newItem_7.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_8 = QTableWidgetItem("分闸时间(ms)")
        self.tableWidget_1.setItem(0, 9, newItem_8)
        newItem_8.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_9 = QTableWidgetItem("A")
        self.tableWidget_1.setItem(1, 6, newItem_9)
        newItem_9.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_10 = QTableWidgetItem("B")
        self.tableWidget_1.setItem(1, 7, newItem_10)
        newItem_10.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_11 = QTableWidgetItem("C")
        self.tableWidget_1.setItem(1, 8, newItem_11)
        newItem_11.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_12 = QTableWidgetItem("A")
        self.tableWidget_1.setItem(1, 9, newItem_12)
        newItem_12.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_13 = QTableWidgetItem("B")
        self.tableWidget_1.setItem(1, 10, newItem_13)
        newItem_13.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        newItem_14 = QTableWidgetItem("C")
        self.tableWidget_1.setItem(1, 11, newItem_14)
        newItem_14.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        ###===========读取表格,转换表格,==========================================
        if len(path_openfile_name) > 0:
            input_table_0 = pd.read_excel(path_openfile_name)  # 读取excel文件里面的内容
            input_table = input_table_0.fillna(value='')  # 将pandas的显示值Nan转化为空
            # print(input_table)
            input_table_rows = input_table.shape[0]  # 获取excel表格的行数,shape表示维度信息查看
            input_table_colunms = input_table.shape[1]  # 获取excel表格的列数
            # print(input_table_rows)
            # print(input_table_colunms)

            #input_table_header = input_table.columns.tolist()  # 获取excel数据的表头
            #input_table_header = input_table.columns.values.tolist()
            # print(input_table_header)

            ###===========读取表格,转换表格,============================================
            ###======================给tablewidget设置行列表头============================

            self.tableWidget.setColumnCount(input_table_colunms)  # 设置tableWidget的列数
            self.tableWidget.setRowCount(input_table_rows)  # 设置tableWidget的行数
            #self.tableWidget.setHorizontalHeaderLabels(input_table_header)  # 设置tableWidget的表头,setHorizontalHeaderLabels()设置水平标签
            # self.tableWidget.setHorizontalHeaderLabels(['文件名','开关型号','开关编号','','',''])
            self.tableWidget.verticalHeader().setVisible(False)  # 隐藏垂直表头
            self.tableWidget.horizontalHeader().setVisible(False)  # 隐藏水平表头

            ###======================给tablewidget设置行列表头============================

            ###================遍历表格每个元素,同时添加到tablewidget中========================
            for i in range(1,input_table_rows):
                input_table_rows_values = input_table.iloc[[i]]  # 读取excel表格每行数据
                # print(input_table_rows_values)
                input_table_rows_values_array = np.array(input_table_rows_values)  # 将每行的数据以一维数组(矩阵)的形式存在
                # print(input_table_rows_values_array)
                input_table_rows_values_list = input_table_rows_values_array.tolist()[0]  # 将excel表格每行的数据以列表形式储存
                # print(input_table_rows_values_list)
                for j in range(input_table_colunms):
                    input_table_items_list = input_table_rows_values_list[j]  # 将excel表格每行数据依次排序
                    # print(input_table_items_list)
                    # print(type(input_table_items_list))

                    ###==============将遍历的元素添加到tablewidget中并显示=======================

                    input_table_items = str(input_table_items_list)
                    # print(input_table_items)
                    newItem = QTableWidgetItem(input_table_items)
                    newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)  # 设置单元格内文本的对齐方式,居中显示在垂直或者水平向上
                    self.tableWidget.setItem(i, j, newItem)  # 设置表格中的值
        ###================遍历表格每个元素,同时添加到tablewidget中========================
            self.tableWidget.setRowHidden(0, 1)   #隐藏tableWidget中指定的行,0代表行数,1代表布尔值
        else:
            self.centralWidget.show()

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    my = Ui_MainWindow()
    my.show()
    sys.exit(app.exec_())

机械特性数据测试.zip

7.14 KB, 下载次数: 3

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-20 20:46:16 | 显示全部楼层
发错地方了吧,这不是应该web前端的么?而且给的网址里不是也写了原因和解决方法了么。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-20 21:01:18 | 显示全部楼层
疾风怪盗 发表于 2020-9-20 20:46
发错地方了吧,这不是应该web前端的么?而且给的网址里不是也写了原因和解决方法了么。。。。。。。

不是呀  我用的python做的,用的pyqt中的table widget,只是想达到上面的效果,因为我也出现了这种情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-20 21:07:18 | 显示全部楼层
差不多先生air 发表于 2020-9-20 21:01
不是呀  我用的python做的,用的pyqt中的table widget,只是想达到上面的效果,因为我也出现了这种情况


那把代码、数据贴出来啊,也好尝试下,否则怎么知道怎么解决?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-20 21:14:49 | 显示全部楼层
疾风怪盗 发表于 2020-9-20 21:07
那把代码、数据贴出来啊,也好尝试下,否则怎么知道怎么解决?

你看吧 ,我把代码还有数据放上面了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-20 21:17:58 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-20 21:20 编辑
差不多先生air 发表于 2020-9-20 21:14
你看吧 ,我把代码还有数据放上面了


好像没装PyQt5。。。。。。
一直用的是pyside2
为啥都没人用pyside2呢。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-20 21:22:33 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-20 21:30 编辑
差不多先生air 发表于 2020-9-20 21:14
你看吧 ,我把代码还有数据放上面了


图形界面是这样的么?
拖到最后看到了错位,是不是上下两个框宽度不一样啊,只有最后才会错位
这个没有直接设计UI的图形界面设计exe么?为什么都喜欢用代码来设置组件大小什么的
屏幕截图 2020-09-20 212154.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-20 21:31:18 | 显示全部楼层
疾风怪盗 发表于 2020-9-20 21:22
图形界面是这样的么?
拖到最后看到了错位,是不是上下两个框宽度不一样啊,只有最后才会错位
这个没 ...

就是这个错位的问题,我找了半天没有解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-20 21:33:58 | 显示全部楼层
疾风怪盗 发表于 2020-9-20 21:22
图形界面是这样的么?
拖到最后看到了错位,是不是上下两个框宽度不一样啊,只有最后才会错位
这个没 ...

你说的是qtdesigner这个exe吗,这个我也有,但是我对里面的调一下参数,不是很熟悉,就直接码代码了,界面就是这个界面,因为我也是单独拉出来调试的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-20 21:34:34 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-20 21:35 编辑
差不多先生air 发表于 2020-9-20 21:31
就是这个错位的问题,我找了半天没有解决

self.tableWidget_1.setGeometry(QtCore.QRect(10, 124, 749, 76))
self.tableWidget.setGeometry(QtCore.QRect(10, 200, 770, 250))

这个很好解决啊,就是因为宽度不一样啊,你设计成一样的宽度,但是没考虑到有滚动条也占了体积,减掉就好了呗,不过这是治标不治本的方法
不过我打开了其他的文档,也没啥问题,你试试吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-20 21:36:58 | 显示全部楼层
差不多先生air 发表于 2020-9-20 21:33
你说的是qtdesigner这个exe吗,这个我也有,但是我对里面的调一下参数,不是很熟悉,就直接码代码了,界 ...

这个工具会简单很多,我之前做了个图形界面,就是pyside2,主逻辑写代码,界面直接用加载Ui,需要修改界面了,直接改就行了,不用改代码,代码毕竟还是要想象位置、大小什么的,有界面直接拖拽不是很简单么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-21 08:39:02 | 显示全部楼层
疾风怪盗 发表于 2020-9-20 21:34
这个很好解决啊,就是因为宽度不一样啊,你设计成一样的宽度,但是没考虑到有滚动条也占了体积, ...

那最开始整体就不对称了呀,那我就没有必要做这样了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-21 10:26:08 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-21 10:43 编辑
差不多先生air 发表于 2020-9-21 08:39
那最开始整体就不对称了呀,那我就没有必要做这样了。


这不是对的很齐的么?哪里不齐了?你试过了没?和我这边界面不一样么?
屏幕截图 2020-09-21 102533.png
屏幕截图 2020-09-21 102516.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-21 10:57:39 | 显示全部楼层
疾风怪盗 发表于 2020-9-21 10:26
这不是对的很齐的么?哪里不齐了?你试过了没?和我这边界面不一样么?

我说的是开始的时候呀,你没有导入数据的时候。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-21 11:00:01 | 显示全部楼层
差不多先生air 发表于 2020-9-21 10:57
我说的是开始的时候呀,你没有导入数据的时候。。。

最开始不齐,有什么关系么?做这个就是为了导入excel看数据,数据齐了不就好了么?
就因为组件大小不一样,就不做了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-21 11:06:15 | 显示全部楼层
本帖最后由 lirenbing01 于 2020-9-21 11:11 编辑

https://blog.csdn.net/u014430031/article/details/78108920 试试这个文章能否帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-21 11:17:52 | 显示全部楼层
疾风怪盗 发表于 2020-9-21 11:00
最开始不齐,有什么关系么?做这个就是为了导入excel看数据,数据齐了不就好了么?
就因为组件大小不一 ...

这个肯定不行呀。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-21 11:26:48 | 显示全部楼层

好吧
刚才好像有个人,回复说可以一个框里设置表头,但是貌似被审核删了。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-21 12:08:34 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-21 12:12 编辑

https://www.jianshu.com/p/88f48e667c17
看下这个,这里有你要的完全显示的,而且是在一个框里,可以参考下
 ###======================给tablewidget设置行列表头============================

            self.tableWidget.setColumnCount(input_table_colunms)
            self.tableWidget.setRowCount(input_table_rows)
            self.tableWidget.setHorizontalHeaderLabels(input_table_header)

你好像就是参照这个模版改的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-21 15:33:24 | 显示全部楼层
疾风怪盗 发表于 2020-9-21 12:08
https://www.jianshu.com/p/88f48e667c17
看下这个,这里有你要的完全显示的,而且是在一个框里,可以参考 ...

这个帖子我找到过,但是设置不了多级表头,只能设置一级表头,我之前的程序就是参照这个改的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 15:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表