【问题标题】:pyqt5 sizing correctly a tableview element in a tabbed widgetpyqt5 正确调整选项卡式小部件中的 tableview 元素
【发布时间】:2018-12-23 12:16:10
【问题描述】:

我无法正确调整选项卡内的表格视图元素 (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:

提前感谢您的支持!

【问题讨论】:

    标签: python pyqt pyqt5 qlayout


    【解决方案1】:

    首先,您必须正确说明布局,并且您不应该使用 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)
    

    【讨论】:

    • 太棒了。为了避免混淆,我必须了解更好的布局用法。我正在网上寻找好的教程/课程,但没有很多。谢了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2015-04-23
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多