如何在tkinter中从Treeview中获取所有值,并在python中执行while循环来遍历变量



所以我用python创建了一个GUI,允许用户向Treeview添加条目。我可以在A列、B列和C列查看结果,分别是国家、城市和道路名称。

使用下面的代码,我可以得到每一行 的结果
for parent in info_tree.get_children():
print(info_tree.item(parent)["values"])

结果如下:

["US", "New York", "5th Street"]
["US", "LA", "Main Street"]
["UK", "London", "Waterloo Road"]

我的问题是,我如何运行一个while循环这个虚拟数据的行,它将查看国家列,而国家列仍然是美国(或任何其他国家),然后对国家相同的所有行的城市和道路列执行操作,直到出现不同的国家。

解决方案,我相信,应该是(伪代码):

While current country == previous country:
cty = driver.find_element(By.NAME, "city")
cty.click()
rd = driver.find_element(By.Name, "road")
rd.click()

任何帮助都是感激的。由于

完整代码:

import tkinter
from tkinter import *
from tkinter import ttk
window = Tk()
# login config
window.title("Report Generator")
window.configure(bg='blue')
window.resizable(0,0)

# main task
def run_task():
for parent in info_tree.get_children():
print(info_tree.item(parent)["values"])

frame = tkinter.Frame(bg='blue')
#treeview config
info_tree = ttk.Treeview(frame, columns=(1,2,3), show="headings", height="6")
info_tree["columns"] = ("Country", "City", "Road")
global count
count=0
data =[]
for record in data:
info_tree.insert(parent="", index="end", iid=count,values=(record[0], record[1], record[2] ))
count+= 1
info_tree.column("#0", width=0, stretch=NO)
info_tree.column("#1", width=120, anchor=W)
info_tree.column("#2", width=120, anchor=W)
info_tree.column("#3", width=120, anchor=W)
info_tree.heading("#0", text="")
info_tree.heading("#1", text="Country", anchor=CENTER)
info_tree.heading("#2", text="City", anchor=CENTER)
info_tree.heading("#3", text="Road", anchor=CENTER)
# insert dummy data for testing
data = [
["US", "New York", "5th Street"],
["US", "LA", "Main Street"],
["UK", "London", "Waterloo Road"]
]
for record in data:
info_tree.insert("", index="end", iid=count,values=(record[0], record[1], record[2]))
count +=1
# creating widgets
country_add = tkinter.Label(frame, text="Country:", bg='blue', fg="#FFFFFF", font=('Arial 12'))
city_add = tkinter.Label(frame, text="City:", bg='blue', fg="#FFFFFF", font=('Arial 12'))
road_add = tkinter.Label(frame, text="Road Name:", bg='blue', fg="#FFFFFF", font=('Arial 12'))
country_entry = tkinter.Entry(frame, font=("Arial", 10), justify=LEFT)
city_entry = tkinter.Entry(frame, font=("Arial", 10), justify=LEFT)
road_entry = tkinter.Entry(frame, font=("Arial", 10), justify=LEFT)
submit_button = tkinter.Button(frame, text="Submit", fg="#000000", font=('Arial 12'), command=run_task)

# positioning widgets
info_tree.grid(row=0, column=0, columnspan=3, pady=5, padx=20, sticky=EW)
country_add.grid(row=1, column=0, pady=[10,0])
country_entry.grid(row=2, column=0, pady=[0,5], padx=[10,0], sticky=W)
city_add.grid(row=1, column=1, pady=[10,0])
city_entry.grid(row=2, column=1, pady=[0,5], padx=[10,0], sticky=W)
road_add.grid(row=1, column=2, pady=[10,0])
road_entry.grid(row=2, column=2, pady=[0,5], padx=[10,0], sticky=W)
submit_button.grid(row=14, column=0, columnspan=2, pady=20)
frame.pack()
window.mainloop()

使用while循环与使用for循环没有太大区别。

例如,如果您希望只在国家列的值为"US"时迭代子节点,则可以这样重写run_task函数。

def run_task():
rows = info_tree.get_children()
i = 0
while i < len(rows) and info_tree.item(rows[i])["values"][0] == "US":
print(info_tree.item(rows[i])["values"])
# do something with rows that contain "US" as country
i += 1

然后如果你点击提交按钮输出是

['US', 'New York', '5th Street']
['US', 'LA', 'Main Street']

最新更新