pyqt5 正确调整选项卡式小部件中的 tableview 元素的大小
pyqt5 sizing correctly a tableview element in a tabbed widget
我无法正确调整选项卡内的 table 视图元素 (self.table_View_1) 的大小,
我尝试了容器、布局等不同的方法,但没有达到 objective。
该代码引用了一个模型 class,它允许在 table 视图中显示 pandas 数据框。
代码如下:
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()
此处 table 的 GUI 大小不正确:
在此先感谢您的支持!
首先,您必须正确说明布局,并且不应使用 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)
我无法正确调整选项卡内的 table 视图元素 (self.table_View_1) 的大小,
我尝试了容器、布局等不同的方法,但没有达到 objective。
该代码引用了一个模型 class,它允许在 table 视图中显示 pandas 数据框。
代码如下:
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()
此处 table 的 GUI 大小不正确:
在此先感谢您的支持!
首先,您必须正确说明布局,并且不应使用 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)