Python 如何在主窗口打开时从主窗口更新顶级树状视图?
问题是,每次单击“提交”按钮时,我都需要关闭并再次打开顶层以查看输入的数据。我只是想在顶级树状视图打开时单击“提交”按钮后自动更新树状视图。解决这个问题的办法是什么 这是我的代码:Python 如何在主窗口打开时从主窗口更新顶级树状视图?,python,tkinter,treeview,Python,Tkinter,Treeview,问题是,每次单击“提交”按钮时,我都需要关闭并再次打开顶层以查看输入的数据。我只是想在顶级树状视图打开时单击“提交”按钮后自动更新树状视图。解决这个问题的办法是什么 这是我的代码: from tkinter import * from tkinter import ttk class win1: def __init__(self, master): self.master = master self.master.geometry('200x200+0
from tkinter import *
from tkinter import ttk
class win1:
def __init__(self, master):
self.master = master
self.master.geometry('200x200+0+0')
self.fullname = StringVar()
self.age = StringVar()
self.example_lst = [('John', 12), ('Hannah', 10)]
self.lblname = Label(self.master, text='Name:')
self.lblname.pack()
self.entryname = Entry(self.master, textvariable=self.fullname)
self.entryname.pack()
self.lblage = Label(self.master, text='Age:')
self.lblage.pack()
self.entryage = Entry(self.master, textvariable=self.age)
self.entryage.pack()
self.btn1 = Button(self.master, text='Submit', command=self.submit)
self.btn1.pack()
self.btn2 = Button(self.master, text='Open window', command=self.openwin)
self.btn2.pack()
def submit(self):
self.example_lst.append((self.fullname.get(), self.age.get()))
self.fullname.set('')
self.age.set('')
def openwin(self):
self.openwin2 = Toplevel(self.master)
app = win2(self.openwin2, self)
class win2:
def __init__(self, master, mainwin):
self.master = master
self.mainwin = mainwin
self.master.geometry('300x300+100+100')
self.t_scroll = Scrollbar(self.master)
self.t_scroll.pack(side=RIGHT, fill=Y)
self.t_table = ttk.Treeview(self.master, yscrollcommand=self.t_scroll.set)
self.t_scroll.config(command=self.t_table.yview)
self.t_table['column'] = ('Name', 'Age')
self.t_table.column('#0', width=0, stretch=NO)
self.t_table.column('Name', width=50, minwidth=30)
self.t_table.column('Age', width=30, minwidth=30)
headings = ['#0', 'Name', 'Age']
txt_headings = ['', 'Name', 'Age']
for i in range(len(headings)):
self.t_table.heading(headings[i], text=f'{txt_headings[i]}', anchor=W)
for x in self.mainwin.example_lst:
self.t_table.insert(parent='', index='end', values=x)
self.t_table.pack()
def main():
root = Tk()
app = win1(root)
root.mainloop()
if __name__ == '__main__':
main()
有趣的练习。我在代码中添加了一些注释,但大部分都没有改动。 要更新其他窗口,必须为另一个窗口创建一个方法,该方法将执行所需的操作。
update_tree
只会将最后添加的人员添加到树中
from tkinter import *
from tkinter import ttk
class win1:
def __init__(self, master):
self.master = master
self.master.geometry('200x200+0+0')
# Initialize app (second window)
self.app = None
self.fullname = StringVar()
self.age = StringVar()
self.example_lst = [('John', 12), ('Hannah', 10)]
self.lblname = Label(self.master, text='Name:')
self.lblname.pack()
self.entryname = Entry(self.master, textvariable=self.fullname)
self.entryname.pack()
self.lblage = Label(self.master, text='Age:')
self.lblage.pack()
self.entryage = Entry(self.master, textvariable=self.age)
self.entryage.pack()
self.btn1 = Button(self.master, text='Submit', command=self.submit)
self.btn1.pack()
self.btn2 = Button(self.master, text='Open window', command=self.openwin)
self.btn2.pack()
def submit(self):
self.example_lst.append((self.fullname.get(), self.age.get()))
self.fullname.set('')
self.age.set('')
# Add update to app in the submit button.
if self.app is not None:
self.app.update_tree()
def openwin(self):
openwin2 = Toplevel(self.master)
self.app = win2(openwin2, self)
class win2:
def __init__(self, master, mainwin):
self.master = master
self.mainwin = mainwin
self.master.geometry('300x300+100+100')
self.t_scroll = Scrollbar(self.master)
self.t_scroll.pack(side=RIGHT, fill=Y)
self.t_table = ttk.Treeview(self.master, yscrollcommand=self.t_scroll.set)
self.t_scroll.config(command=self.t_table.yview)
self.t_table['column'] = ('Name', 'Age')
self.t_table.column('#0', width=0, stretch=NO)
self.t_table.column('Name', width=50, minwidth=30)
self.t_table.column('Age', width=30, minwidth=30)
headings = ['#0', 'Name', 'Age']
txt_headings = ['', 'Name', 'Age']
for heading in zip(headings, txt_headings):
self.t_table.heading(heading[0], text=f'{heading[1]}', anchor=W)
# Initialize the example list data.
self.load_init()
self.t_table.pack()
def load_init(self):
for x in range(len(self.t_table.children), len(self.mainwin.example_lst)):
self.t_table.insert(parent='', index='end', values=self.mainwin.example_lst[x])
def update_tree(self):
self.t_table.insert(parent='', index='end', values=self.mainwin.example_lst[-1])
def main():
root = Tk()
app = win1(root)
root.mainloop()
if __name__ == '__main__':
main()
有趣的练习。我在代码中添加了一些注释,但大部分都没有改动。 要更新其他窗口,必须为另一个窗口创建一个方法,该方法将执行所需的操作。
update_tree
只会将最后添加的人员添加到树中
from tkinter import *
from tkinter import ttk
class win1:
def __init__(self, master):
self.master = master
self.master.geometry('200x200+0+0')
# Initialize app (second window)
self.app = None
self.fullname = StringVar()
self.age = StringVar()
self.example_lst = [('John', 12), ('Hannah', 10)]
self.lblname = Label(self.master, text='Name:')
self.lblname.pack()
self.entryname = Entry(self.master, textvariable=self.fullname)
self.entryname.pack()
self.lblage = Label(self.master, text='Age:')
self.lblage.pack()
self.entryage = Entry(self.master, textvariable=self.age)
self.entryage.pack()
self.btn1 = Button(self.master, text='Submit', command=self.submit)
self.btn1.pack()
self.btn2 = Button(self.master, text='Open window', command=self.openwin)
self.btn2.pack()
def submit(self):
self.example_lst.append((self.fullname.get(), self.age.get()))
self.fullname.set('')
self.age.set('')
# Add update to app in the submit button.
if self.app is not None:
self.app.update_tree()
def openwin(self):
openwin2 = Toplevel(self.master)
self.app = win2(openwin2, self)
class win2:
def __init__(self, master, mainwin):
self.master = master
self.mainwin = mainwin
self.master.geometry('300x300+100+100')
self.t_scroll = Scrollbar(self.master)
self.t_scroll.pack(side=RIGHT, fill=Y)
self.t_table = ttk.Treeview(self.master, yscrollcommand=self.t_scroll.set)
self.t_scroll.config(command=self.t_table.yview)
self.t_table['column'] = ('Name', 'Age')
self.t_table.column('#0', width=0, stretch=NO)
self.t_table.column('Name', width=50, minwidth=30)
self.t_table.column('Age', width=30, minwidth=30)
headings = ['#0', 'Name', 'Age']
txt_headings = ['', 'Name', 'Age']
for heading in zip(headings, txt_headings):
self.t_table.heading(heading[0], text=f'{heading[1]}', anchor=W)
# Initialize the example list data.
self.load_init()
self.t_table.pack()
def load_init(self):
for x in range(len(self.t_table.children), len(self.mainwin.example_lst)):
self.t_table.insert(parent='', index='end', values=self.mainwin.example_lst[x])
def update_tree(self):
self.t_table.insert(parent='', index='end', values=self.mainwin.example_lst[-1])
def main():
root = Tk()
app = win1(root)
root.mainloop()
if __name__ == '__main__':
main()
对于类名,请使用CapitalCase好的先生,谢谢您的提醒,因此您可以立即打包小部件,然后向其添加内容对于类名,请使用CapitalCase好的先生,谢谢您的提醒,因此您可以立即打包小部件,然后向其添加内容