如何解决为什么在尝试移动按钮时.grid给我一个错误
import time
import tkinter as tk
from tkinter import scrolledtext
win = tk.Tk()
win.title("My First Game")
win.configure(bg="black")
win.geometry("640x400")
label = tk.Label(win,text="test",fg="red",bg="black").pack()
canvas1 = tk.Canvas(win,width=130,height=20)
canvas1.pack()
entry1 = tk.Entry(win,font="Helvetica 10")
canvas1.create_window(65,10,window=entry1)
entry1.insert(0,"Type here")
def shortcut():
Shortcut = tk.Label(win,bg="black",text="test2")
Shortcut.pack()
button1 = tk.Button(win,text="Enter",command=shortcut)
button1.pack()
exit_button = tk.Button(win,text="Quit",padx=4,pady=2,command=quit)
exit_button.pack()
exit_button.grid(row=0,column=2)
win.mainloop()
这为什么给我一个错误?我在一个只有黑屏和按钮的单独项目中尝试过,效果很好。但是当我把它放在上面的代码中不起作用
line 42,in <module> exit_button.grid(row=0,column=2)
_tkinter.TclError: cannot use geometry manager grid inside . which already has slaves managed by pack
解决方法
正如@ 10Rep在评论中提到的那样-您可以删除grid()
来解决错误问题。
import tkinter as tk
# --- functions ---
def shortcut():
shortcut = tk.Label(win,text="test2")
shortcut.pack()
# --- main ---
win = tk.Tk()
label = tk.Label(win,text="test")
label.pack()
canvas1 = tk.Canvas(win) #,width=130,height=20)
canvas1.pack()
entry1 = tk.Entry(canvas1)
canvas1.create_window(0,window=entry1,anchor='nw')
entry1.insert(0,"Type here")
button1 = tk.Button(win,text="Enter",command=shortcut)
button1.pack()
exit_button = tk.Button(win,text="Quit",command=win.destroy)
exit_button.pack()
win.mainloop()
但是我希望您使用grid()
将两个按钮排成一行。
问题是您无法在一个窗口/帧中混合使用pack()
和grid()
,但我看到两种解决方案:
首先是仅使用grid()
来组织所有小部件
import tkinter as tk
# --- functions ---
def shortcut():
shortcut = tk.Label(win,text="test2")
shortcut.grid(row=3,column=0,columnspan=2)
# --- main ---
win = tk.Tk()
label = tk.Label(win,text="test")
label.grid(row=0,columnspan=2)
canvas1 = tk.Canvas(win) #,height=20)
canvas1.grid(row=1,columnspan=2)
entry1 = tk.Entry(canvas1)
canvas1.create_window(0,command=shortcut)
button1.grid(row=2,column=0)
exit_button = tk.Button(win,command=win.destroy)
exit_button.grid(row=2,column=1)
win.mainloop()
第二种方法是使用Frame
将pack()
(使用grid()
)和按钮放置在该框架内
import tkinter as tk
# --- functions ---
def shortcut():
shortcut = tk.Label(win,"Type here")
# - frame with grid -
f = tk.Frame(win)
f.pack()
button1 = tk.Button(f,command=shortcut)
button1.grid(row=0,column=0)
exit_button = tk.Button(f,command=win.destroy)
exit_button.grid(row=0,column=1)
# -
win.mainloop()
或使用pack(side=...)
import tkinter as tk
# --- functions ---
def shortcut():
shortcut = tk.Label(win,"Type here")
# - frame with pack(side=...) -
f = tk.Frame(win)
f.pack()
button1 = tk.Button(f,command=shortcut)
button1.pack(side='left')
exit_button = tk.Button(f,command=win.destroy)
exit_button.pack(side='left')
# -
win.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。