pyqt5在选项卡式小部件中正确调整tableview元素的大小 - python

我无法在标签内正确调整表格视图元素(self.table_View_1)的大小,

我尝试了各种方法,例如容器,布局等,但未达到目标。

该代码引用一个模型类,该模型类允许在表视图内显示熊猫数据框。

这是代码:

import sys

import Mod_PX
from PandasModel import PandasModel

from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QPushButton, QHBoxLayout, QTabWidget, QVBoxLayout, QWidget, QMainWindow, QGroupBox
from PyQt5.QtCore import pyqtSlot


class ProgramWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setup_main_window()
        self.set_window_layout()

    def setup_main_window(self):
        self.centralwidget = QWidget()
        self.setCentralWidget(self.centralwidget)
        self.resize( 800, 350  )
        self.setWindowTitle( "ProjectX" )

    def set_window_layout(self):

        self.vbox_1 = QVBoxLayout(self.centralwidget)

        self.hgroup_2 = QGroupBox()
        self.hlayout_2 = QHBoxLayout()
        self.hgroup_2.setLayout(self.hlayout_2)
        self.btn_Analisi = QPushButton('Analisi', self)
        self.btn_Help = QPushButton('Help')
        self.btn_Wiz = QPushButton('Wizard')
        self.btn_Analisi.clicked.connect(self.loadFile)
        self.hlayout_2.addWidget(self.btn_Analisi)
        self.hlayout_2.addWidget(self.btn_Help)
        self.hlayout_2.addWidget(self.btn_Wiz)
        self.vbox_1.addWidget(self.hgroup_2)

        # Initialize tabs_1 screen
        self.tabs_1 = QTabWidget()
        self.tab1_1 = QWidget()
        self.tab2_1 = QWidget()
        self.tab3_1 = QWidget()
        # Add tabs
        self.tabs_1.addTab(self.tab1_1, "WWA")
        self.tabs_1.addTab(self.tab2_1, "WTP")
        self.tabs_1.addTab(self.tab3_1, "WTW")
        # Add tabs to widget
        self.vbox_1.addWidget(self.tabs_1)

        # Initialize tabs_2 screen
        self.tabs_2 = QTabWidget(self.tab1_1)
        self.tab1_2 = QWidget()
        self.tab2_2 = QWidget()
        self.tabs_2.setTabPosition(QtWidgets.QTabWidget.West)
        self.vbox_2 = QVBoxLayout(self.tab1_1)
        # Add tabs
        self.tabs_2.addTab(self.tab1_2, "Foglio 1")
        self.tabs_2.addTab(self.tab2_2, "Foglio 2")
        #Add tabs to widget
        self.table_View_1 = QtWidgets.QTableView(self.tab1_2)
        self.table_View_1.setObjectName("table_View_1")
        font = QtGui.QFont()
        font.setPointSize(10)
        self.table_View_1.setFont(font)
        self.table_View_1.setGeometry(0,0,self.tab1_2.width(),self.tab1_2.height())
        self.vbox_2.addWidget(self.tabs_2)

        self.show()


    @pyqtSlot()
    def loadFile(self):
        df = Mod_PX.sheet_b()
        model = PandasModel(df)
        self.table_View_1.setModel(model)

def main():
    app = QApplication(sys.argv)
    programWindow = ProgramWindow()

    programWindow.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

此处带有表格的GUI大小不正确:

pyqt5在选项卡式小部件中正确调整tableview元素的大小 - python

预先感谢您对我们的支持!

参考方案

首先,您必须正确声明布局,并且不应使用setGeometry,因为那是布局的任务。我已经修改了代码的结构以使其具有顺序,因此最后我指出了布局之间的关系。

def set_window_layout(self):
    #buttons
    self.btn_Analisi = QtWidgets.QPushButton('Analisi')
    self.btn_Help = QtWidgets.QPushButton('Help')
    self.btn_Wiz = QtWidgets.QPushButton('Wizard')

    # Initialize tabs_1 screen
    self.tabs_1 = QtWidgets.QTabWidget()
    self.tab1_1 = QtWidgets.QWidget()
    self.tab2_1 = QtWidgets.QWidget()
    self.tab3_1 = QtWidgets.QWidget()
    # Add tabs
    self.tabs_1.addTab(self.tab1_1, "WWA")
    self.tabs_1.addTab(self.tab2_1, "WTP")
    self.tabs_1.addTab(self.tab3_1, "WTW")

    # Initialize tabs_2 screen
    self.tabs_2 = QtWidgets.QTabWidget()
    self.tab1_2 = QtWidgets.QWidget()
    self.tab2_2 = QtWidgets.QWidget()
    self.tabs_2.setTabPosition(QtWidgets.QTabWidget.West)
    # Add tabs
    self.tabs_2.addTab(self.tab1_2, "Foglio 1")
    self.tabs_2.addTab(self.tab2_2, "Foglio 2")

    self.table_View_1 = QtWidgets.QTableView()
    font = QtGui.QFont()
    font.setPointSize(10)
    self.table_View_1.setFont(font)

    # connections
    self.btn_Analisi.clicked.connect(self.loadFile)

    # layouts
    vbox = QtWidgets.QVBoxLayout(self.centralwidget)
    hgroup = QtWidgets.QGroupBox()
    vbox.addWidget(hgroup)
    hlay_group = QtWidgets.QHBoxLayout(hgroup)
    hlay_group.addWidget(self.btn_Analisi)
    hlay_group.addWidget(self.btn_Help)
    hlay_group.addWidget(self.btn_Wiz)
    vbox.addWidget(self.tabs_1)

    lay = QtWidgets.QVBoxLayout(self.tab1_1)
    lay.addWidget(self.tabs_2)

    lay_tableview = QtWidgets.QVBoxLayout(self.tab1_2)
    lay_tableview.addWidget(self.table_View_1)

如何在PyQt4的动态复选框列表中检查stateChanged - python

所以我要从PyQt4的列表中添加复选框。但是我找不到在Window类中对每个状态使用stateChanged的方法。这是从列表元素添加它们的功能: def addCheckbox(self): colunas = Graphic(self.caminho).getColunas() for col in colunas: c = QtGui.QCheckBo…

管理多个会话和图形的合理方法 - python

我想在多个会话中管理多个Keras模型。构建我的应用程序后,除了创建,保存和加载模型外,还可以同时运行它们。处理这种情况的正确方法是什么?当前,一个模型由包装类的实例表示。它用于训练,保存,加载和预测。每个实例创建一个tf.Graph和tf.Session,它们在需要实际模型的每个函数中使用。class NN: def __init__(self): sel…

Python SimpleHTTPServer接收文件 - python

我正在使用SimpleHTTPServer的do_POST方法来接收文件。如果我使用curl上传png文件,则脚本运行良好,但是每当我使用python请求库上传文件时,文件都会上传但损坏。这是SimpleHTTPServer代码#!/usr/bin/env python # Simple HTTP Server With Upload. import os …

Python:按顺序执行步骤 - python

我试图制作一个完全可切片的斐波那契数列,但我一直陷于切片的阶跃特征。这是我到目前为止的代码:class Fib: def __init__(self, start, end): self.start = start self.end = end def _fib(self, index): items = [0,1] n = 2 while n <= …

如何每隔n秒运行一个函数,但又不中断其他代码?也许在后台运行? - python

Python是我的第一语言,因此如果没有意义,请理解我。我正在用python制作虚拟宠物。我将Tkinter用于GUI。我想每5秒在Action类中运行一次display方法。但是,如果我使用线程,时间表或时间并将代码放在按钮的正前方,它就会冻结并只运行显示方法。如何在不中断按钮和其他部件的情况下每5秒运行一次显示方法?class Pet: def __in…