当我打开树的一个分支时,Python Tkinter Treeview层次结构数据没有移动

2024-04-19 16:41:35 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图显示分层数据时,treeview遇到了一些问题。理想的产出如下: desirable output

但我的代码生成了以下树视图: Closed branchesOpen branches

请在下面找到我的代码的相关部分:

import tkinter
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from ttkbootstrap import Style

root = Tk()
style = Style("superhero", master=root)
root.wm_iconbitmap(get_ico())
root.title('Alegység kezelyő')
root.geometry('700x650')

def machineQuery():
    for i in query_tree.get_children():
        query_tree.delete(i)
        root.update()

    conn = connectMe()
    cur = conn.cursor()

    cur.execute("SELECT gepszam_id, azonosito, megnevezes FROM gep")
    records = cur.fetchall()
    print_records_id = ''
    print_records = ''

    for record in records:
        print_records_id = record[0]      
        print_records = '"' + str(record[2]) + '" "' + str(record[1]) + '"'
        query_tree.insert(parent='', index='end', iid=print_records_id, values=print_records,open=False)

    conn.close()

def mainQuery():
    conn = connectMe()
    cur = conn.cursor()

    cur.execute("SELECT gep_egyseg.gepszam_id, gep_egyseg.gepegyseg_id, gep_egyseg.egyseg_megnevezes FROM gep_egyseg JOIN gep ON gep_egyseg.gepszam_id = gep.gepszam_id")
    records = cur.fetchall()
    print(records)
    print_records_id = ''
    print_records = ''

    for record in records:
        print_records_id = record[1]      
        for_iid=str(record[0]) + "." + str(print_records_id)
        print_records = '"' + str(record[2]) + '" "' + ' ' + '"'        
        query_tree.insert(parent='', index='end', iid=for_iid, values=print_records,open=False)
        query_tree.move(for_iid, record[0], END)

    conn.close()

def query():
    machineQuery()
    mainQuery()

query_scrollbar = ttk.Scrollbar(root, orient = VERTICAL)
query_tree = ttk.Treeview(root, yscrollcommand = query_scrollbar.set)
query_scrollbar.configure(command = query_tree.yview)
query_scrollbar.grid(row = 3, column = 2, sticky = NS)
query_tree['columns'] = ("Name", "Machine_id")

query_tree.column("#0", anchor = W, width = 20, stretch=NO)
query_tree.column("Machine_id", anchor = W, width = 100, minwidth = 50)
query_tree.column("Name", anchor=W, width = 150, minwidth = 75)

query_tree.heading("0", text = "  ")
query_tree.heading("Machine_id", text = "Gép azonosító")
query_tree.heading("Name", text = "Név")

query_tree.grid(row =3, column = 0, columnspan=2, sticky= NSEW)

query()

root.mainloop()

我知道这只是一个美学问题,但它确实困扰着我

谢谢你的帮助

编辑: 包含一些示例数据的版本:

import tkinter
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from ttkbootstrap import Style

root = Tk()
style = Style("superhero", master=root)
#root.wm_iconbitmap(get_ico())
root.title('Alegység kezelyő')
root.geometry('700x650')

def machineQuery():
    for i in query_tree.get_children():
        query_tree.delete(i)
        root.update()

    
    records = [(1, 'Some_uniqe_data1', "Machine1"), (15, 'Some_uniqe_data2', 'Machine2')]
    print_records_id = ''
    print_records = ''

    for record in records:
        print_records_id = record[0]      
        print_records = '"' + str(record[2]) + '" "' + str(record[1]) + '"'
        query_tree.insert(parent='', index='end', iid=print_records_id, values=print_records,open=False)

def mainQuery():

    records = [(1, 1, 'Sub_component1'), (15, 2, 'Sub_component2'), (15, 3, 'Sub_component3')]
    print(records)
    print_records_id = ''
    print_records = ''

    for record in records:
        print_records_id = record[1]      
        for_iid=str(record[0]) + "." + str(print_records_id)
        print_records = '"' + str(record[2]) + '" "' + ' ' + '"'        
        query_tree.insert(parent='', index='end', iid=for_iid, values=print_records,open=False)
        query_tree.move(for_iid, record[0], END)

def query():
    machineQuery()
    mainQuery()
    
query_scrollbar = ttk.Scrollbar(root, orient = VERTICAL)
query_tree = ttk.Treeview(root, yscrollcommand = query_scrollbar.set)
query_scrollbar.configure(command = query_tree.yview)
query_scrollbar.grid(row = 3, column = 2, sticky = NS)
query_tree['columns'] = ("Name", "Machine_id")

query_tree.column("#0", anchor = W, width = 20, stretch=NO)
query_tree.column("Machine_id", anchor = W, width = 100, minwidth = 50)
query_tree.column("Name", anchor=W, width = 150, minwidth = 75)

query_tree.heading("0", text = "  ")
query_tree.heading("Machine_id", text = "Some_Unique_Datas")
query_tree.heading("Name", text = "Name")

query_tree.grid(row =3, column = 0, columnspan=2, sticky= NSEW)

query()

root.mainloop()

Tags: fromimportidtreefortkintercolumnroot
1条回答
网友
1楼 · 发布于 2024-04-19 16:41:35

根据提供的数据,我做了以下更改:

  • 使用列#0作为Name
  • 使用record[0]作为mainQuery()parent选项的值

以下是所需的更改:

...

def machineQuery():
    for i in query_tree.get_children():
        query_tree.delete(i)

    # fields: machine_id, unique_data, machine_name
    records = [(1, 'Some_uniqe_data1', "Machine1"), (15, 'Some_uniqe_data2', 'Machine2')]
    for record in records:
        query_tree.insert(parent='', index=END, iid=record[0], text=record[2], values=record[1])

def mainQuery():
    # fields: machine_id, component_id, component_name
    records = [(1, 1, 'Sub_component1'), (15, 2, 'Sub_component2'), (15, 3, 'Sub_component3')]
    for record in records:
        query_tree.insert(parent=record[0], index=END, iid=f"{record[0]}.{record[1]}", text=record[2])

...

query_tree['columns'] = ['#1']

query_tree.column("#0", anchor=W, width=200, stretch=NO)
query_tree.column("#1", anchor=W, width=100, minwidth=50)

query_tree.heading("#0", text="Name", anchor=W)
query_tree.heading("#1", text="Some Unique Data", anchor=W)

...

root.columnconfigure(0, weight=1)
root.rowconfigure(3, weight=1)

root.mainloop()

结果是:

enter image description here

相关问题 更多 >