我有一个带有Frame的布局,并在其中包装了一些寡妇。如此有效。但是对于treeview小部件,它不起作用,并给出了一个奇怪的错误:
Treeview中的显示名称不适用于tkinter包。TclError: 无法在内部使用几何图形管理器包。已经有奴隶了 由网格管理
需要有经验的tkinter用户的帮助。
在这里,如果我尝试使用树视图而不是标签小部件进行同样的操作:
这是我的程序:
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()
答案 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
中将网格用于其他小部件,因此会出现错误。这是因为布局管理器win
和pack
不能在同一主窗口小部件中同时使用。
另一方面,测试标签的原版为grid
,因此可以将其包装在里面。如果将树视图的母版更改为center_frame
,则可以像标签一样打包它。
center_frame
答案 1 :(得分:0)
就我而言,如果将treeview.pack()更改为treeview.grid(sticky = W)等,则可能会起作用。您不能在同一个小部件中同时包含pack和grid。