我目前正在为python tkinter开发一个发票生成器,用于我的课程。我对编程很陌生并创建了一个基本的登录页面,所以当按下登录按钮时(还没有设置限制),GUI会移动到下一个“屏幕”。我正在使用框架来做到这一点。但是,在下一个“页面”上我只能打包()小部件,如果我尝试放置它们或使用网格它们根本就不会出现,我得到一个空的GUI窗口。 #!的/ usr / bin中/蟒蛇 # - - 编码:utf-8 - -
import tkinter as tk
root = tk.Tk()
def go_to_login():
f1.pack()
f2.pack_forget()
def go_to_first():
f1.pack_forget()
f2.pack()
root.geometry('1280x800')
root.title('Invoice')
f1 = tk.Frame(root)
label_US = tk.Label(f1, text='Username')
label_US.pack()
label_PW = tk.Label(f1, text='Password')
label_PW.pack()
entry_US = tk.Entry(f1)
entry_US.pack()
entry_PW = tk.Entry(f1, show='*')
entry_PW.pack()
checkbox_LI = tk.Checkbutton(f1, text='Keep me logged in')
checkbox_LI.pack()
but_LI = tk.Button(f1, text='login', command=go_to_first)
but_LI.pack()
but_QT = tk.Button(f1, text='Quit', command=quit)
but_QT.pack()
f2 = tk.Frame(root)
but_LO = tk.Button(f2, text='Logout', command=go_to_login)
but_LO.pack() # try to change pack here
but_HP = tk.Button(f2, text='Help')
but_HP.pack() # try to change pack here
but_NX1 = tk.Button(f2, text='Next', command=quit)
but_NX1.pack() # try to change pack here
f1.pack()
root.mainloop()
我基本上想要的是能够place
或使用grid
在第二帧上设置我的小部件的位置,但除非我使用pack
我得到一个空的GUI屏幕。我做错了什么或者如何将小部件放在包装上?
我不确定这是否是最好的做事方式,我没有使用课程等经验,但我愿意接受建议。
答案 0 :(得分:0)
只要您在使用row
时指定column
和.grid()
,代码就可以在两个“屏幕”中正常使用。我可以想到你的代码不能正常工作的两个可能原因
1)如果您尝试在同一帧中使用.pack
和.grid
两个标签,则会出现错误
2)您的代码中可能还有其他内容导致您的错误,如果是,请将其添加到您的问题
无论如何,这里的代码对我有用:
f2 = tk.Frame(root)
but_LO = tk.Button(f2, text='Logout', command=go_to_login)
but_LO.grid(row = 0, column = 0) # specify row and column
but_HP = tk.Button(f2, text='Help')
but_HP.grid(row = 1, column = 0)
but_NX1 = tk.Button(f2, text='Next', command=quit)
but_NX1.grid(row = 2, column = 0)