tkinter框架布局与网格和包

时间:2020-06-27 16:42:01

标签: python tkinter layout

我有一个带有Frame的布局,并在其中包装了一些寡妇。如此有效。但是对于treeview小部件,它不起作用,并给出了一个奇怪的错误:

Treeview中的显示名称不适用于tkinter包。TclError: 无法在内部使用几何图形管理器包。已经有奴隶了 由网格管理

需要有经验的tkinter用户的帮助。

这是我的布局: enter image description here

在这里,如果我尝试使用树视图而不是标签小部件进行同样的操作: enter image description here

这是我的程序:

import tkinter as tk
from tkinter import ttk

# Main App
win = tk.Tk()

win.title('Layout Test')
win.geometry('1200x720+300+300')
win.resizable(True, True)


# Frame Design

top_frame = tk.Frame(win, background="#FFF0C1", bd=1, relief="sunken")
left_frame = tk.Frame(win, background="#D2E2FB", bd=1, relief="sunken")
center_frame = tk.Frame(win, background="#CCE4CA", bd=1, relief="sunken")
right_frame = tk.Frame(win, background ='lightblue', bd=1, relief='sunken')
bottom_frame = tk.Frame(win, background="#F5C2C1", bd=1, relief="sunken")

top_frame.grid(row=0, column=0, columnspan=3, sticky="nsew", padx=2, pady=2)
left_frame.grid(row=1, column=0, sticky="nsew", padx=2, pady=2)
center_frame.grid(row=1, column=1, sticky="nsew", padx=2, pady=2)
right_frame.grid(row=1, column=2,  sticky="nsew", padx=2, pady=2)
bottom_frame.grid(row=3, column=0, columnspan=3, sticky="nsew", padx=2, pady=2)

win.grid_rowconfigure(0, weight=6)
win.grid_rowconfigure(1, weight=40)
win.grid_rowconfigure(3, weight=1)

win.grid_columnconfigure(0, weight=1)
win.grid_columnconfigure(1, weight=2)
win.grid_columnconfigure(2, weight=4)


# Display Names in the Treeview doesn't work with pack
# tkinter.TclError: cannot use geometry manager pack inside .
# which already has slaves managed by grid

treeview = ttk.Treeview(win)
treeview.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) 

treeview.insert('center_frame','0','item1', text = 'First item',tag='T' ) 
treeview.insert('center_frame','1','item2', text = 'Second item',tag='T' ) 
treeview.insert('center_frame','2','item3', text = 'Third item',tag='T' )
treeview.insert('center_frame','3','item4', text = 'Forth item',tag='T' )
treeview.insert('center_frame','end','item5', text = 'Five item',tag='T' )

treeview.insert('item1','end','item6', text = 'Sechster Text',tag='T' )



treeview.tag_configure('T', font=('Calibre', 15))

"""
# Test works well with pack
MyLabel = tk.Label(center_frame,text="Label inside Frame1")
MyLabel.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
"""



# Program here



# Status Bar at bottom_frame works well with pack
statustext = tk.StringVar()
statustext.set(' ... choose your avm_xml file') # will be changed from file dialoge
status = ttk.Label(bottom_frame, textvariable=statustext, borderwidth='25', relief=tk.SUNKEN, anchor=tk.W)
status.pack(side=tk.BOTTOM, fill=tk.X) #fill='both', expand=False, padx=8, pady=8

win.mainloop()

2 个答案:

答案 0 :(得分:0)

adam@blackbox:~/Programming/framatest$ frama-c -wp -wp-rte main.c [kernel] Parsing main.c (with preprocessing) main.c:31:[kernel] warning: Neither code nor specification for function getStr, generating default assigns from the prototype [rte] annotating function main [rte] annotating function process [rte] annotating function swap [wp] 12 goals scheduled [wp] [Alt-Ergo] Goal typed_process_assert_rte_mem_access_2 : Unknown (Qed:0.62ms) (63ms) [wp] [Alt-Ergo] Goal typed_process_assert_rte_mem_access : Unknown (Qed:0.78ms) (62ms) [wp] Proved goals: 10 / 12 Qed: 7 (0.13ms-2ms-9ms) Alt-Ergo: 3 (4ms-6ms) (21) (unknown: 2) 具有treeview作为主节点,因此,当您打包它时,由于在win中将网格用于其他小部件,因此会出现错误。这是因为布局管理器winpack不能在同一主窗口小部件中同时使用。

另一方面,测试标签的原版为grid,因此可以将其包装在里面。如果将树视图的母版更改为center_frame,则可以像标签一样打包它。

center_frame

答案 1 :(得分:0)

就我而言,如果将treeview.pack()更改为treeview.grid(sticky = W)等,则可能会起作用。您不能在同一个小部件中同时包含pack和grid。

相关问题