我对python很新,对PyQt来说还是新手。
当我点击文件浏览按钮时,我正在尝试在我的pyqt程序中嵌入一个QTableWidget。我的目标是创建一个类来创建多个表,但是为了简化事情,我将类设置为静态,因此当它被调用时会生成一个预定义的表。现在我只想看看如何嵌入表格。
我在我的类MainWindow中定义了两个方法“InitializeUI”和“import”。 InitializeUI负责我的大多数小部件的创建和布局,我希望import能够使用我在InitializeUI中创建的布局创建和嵌入我的表。我该怎么做呢?
此外,我运行的代码只是给出了错误“进程已完成退出代码1”,因此很难调试。这是我目前的代码。
将我的浏览按钮连接到导入方法的代码
import pandas as pd
from cytoolz.dicttoolz import merge
from cytoolz import concat
from bs4 import BeautifulSoup
from glob import glob
lox = glob('./*xml')
def p_item(i):
s = i.find_all('stock')
return merge([j.attrs for j in s] + [i.attrs])
def p_soup(f):
soup = BeautifulSoup(open(f), "lxml")
return [p_item(i) for i in soup.find_all('item')]
pd.DataFrame(list(concat([p_soup(f) for f in lox])))
alt alt_id grocery id type type_id
0 True 10069227 apple id1 fruit 10067060
1 True 10015946 bannana id2 NaN NaN
2 True 10019211 orange id3 NaN NaN
3 False 10028810 garlic id4 NaN NaN
4 False 10020751 tomato id5 vegetable 10020756
5 False 10037087 carrot id6 vegetable 10023084
6 False 10037844 onion AR7 NaN NaN
7 True 10024570 water mellon id8 fruit 10042703
8 True 10042727 cherry id9 fruit 10042706
9 False 10034829 Apricot id10 fruit 10043525
导入方法的代码。我的主窗口有三个布局,左侧,右上方和右下方有一个垂直框。我希望我的桌子进入窗户的右下角。
self.BrowseBtn.clicked.connect(self.import1)
用于创建表的类
def import1(self):
self.Table = CreateTable()
vboxRightBottom.addWidget(self.Table)
我觉得我不能用另一种方法从一个方法调用布局,但我不确定如何以任何其他方式嵌入我的表。
抱歉,当我复制/粘贴我的代码时,如果代码没有正确缩进,那么堆栈很糟糕。
如果您需要进一步参考,请参阅我的完整代码链接
https://github.com/Silvuurleaf/Data-Analysis-and-Visualization-GUI/blob/master/Plotter3.1.py
答案 0 :(得分:1)
vboxRightBottom
看起来不在课堂上,首先你应该在它被调用的地方(在__init__
的声明中和每个方法中)解决这个问题:
self.vboxRightBottom = QVBoxLayout()
def import1(self):
self.Table = CreateTable()
self.vboxRightBottom.addWidget(self.Table)
然后你处理类的方式不方便,你应该直接创建一个对象QTableWidget,如下所示:
class CreateTable(QTableWidget):
def __init__(self):
super(CreateTable, self).__init__()
self.setRowCount(4)
self.setColumnCount(2)
self.setItem(0,0, QTableWidgetItem("Cell (1,1)"))
self.setItem(0,1, QTableWidgetItem("Cell (1,2)"))
self.setItem(1,0, QTableWidgetItem("Cell (2,1)"))
self.setItem(1,1, QTableWidgetItem("Cell (2,2)"))
self.setItem(2,0, QTableWidgetItem("Cell (3,1)"))
self.setItem(2,1, QTableWidgetItem("Cell (3,2)"))
self.setItem(3,0, QTableWidgetItem("Cell (4,1)"))
self.setItem(3,1, QTableWidgetItem("Cell (4,2)"))
因此,当您对该类进行实例化时,它会返回该小部件,否则您应该将self.Table.tableWidget
提供给addWidget
方法
self.table = CreateTable()
self.vboxRightBottom.addWidget(self.table)