Python:如何将Pandas DataFrame显示为在Glade中制作的Gtk TreeView Widget
问题描述:
我正在构建一个UI,我可以让用户操作数据并选择他们希望使用的参数。我无法将Pandas DataFrame显示到我在Glade中制作的TreeView小部件中。Python:如何将Pandas DataFrame显示为在Glade中制作的Gtk TreeView Widget
下面是包含基于GTK的TreeView控件我格莱德XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.19.0 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkWindow" id="MainWindow">
<property name="can_focus">False</property>
<child>
<object class="GtkTreeView" id="AllDataTreeView">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
</object>
</child>
</object>
</interface>
这里是我的Python脚本调用,并构建GTK的格莱德UI,与熊猫据帧我想显示。
import pandas as pd
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
#%% dataframe to be displayed:
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
#%%
class Handler:
#############################
## INITIALIZATIONS/EXITS ##
#############################
def __init__(self): #initializes the glade file used as well as any windows or text/image viewers#
self.gladefile = "ShowDataExample.glade"
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.builder.connect_signals(self)
self.window = self.builder.get_object("MainWindow")
# TreeView
self.AllDataTreeView = self.builder.get_object("AllDataTreeView")
# show glade setup
self.window.show()
def on_gtk_quit_activate(self, menuitem, data=None): #closes window when you click on quit from the file chooser#
print "quit from menu"
Gtk.main_quit()
def onDeleteWindow(self, *args): #closes window when you click on the x at the top of the window#
Gtk.main_quit(*args)
if __name__ == "__main__": #Calls on the UI#
main = Handler()
Gtk.main()
任何输入,或链接到有用的例子将不胜感激!
答
看看关于Gtk.TreeView在https://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html
# create model like this
store = Gtk.ListStore(str, str, str)
# fill it with your data
for row in df.itertuples():
store.append([row[0], row[1], row[2]])
# set it as TreeView model
self.AllDataTreeView.set_model(store)
# Create and append columns
for i, col in enumerate(df.columns, start=1):
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn(col, renderer, text=i)
self.AllDataTreeView.append_column(col)
# in yours init function change from this
self.window.show()
# to this
self.window.show_all()
而且你应该罚款
我做到了。我仍然有问题连接我的列表库到我的Glade UI中的TreeView小部件。 – user2312900