如何解决如何启用.grid?
我想放置用户名和密码,使其彼此相邻。为了实现这一点,我使用了grid
方法,但不断收到错误消息:
_tkinter.TclError: cannot use geometry manager grid inside .!frame.!adminlogin.!frame which already has slaves managed by pack
。
有没有办法让它甚至可以使用grid
?
import tkinter as tk
from tkinter import font as tkfont
import PIL.Image
from PIL import ImageTk
from tkinter import *
import tkinter.font as font
import sqlite3,hashlib
from datetime import date
class SampleApp(tk.Tk):
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self,**kwargs)
self.title_font = tkfont.Font(family='Helvetica',size=18,weight="bold",slant="italic")
# the container is where we'll stack a bunch of frames
# on top of each other,then the one we want visible
# will be raised above the others
self.geometry ("1024x768")
container = tk.Frame(self)
container.pack(fill="both",side= 'top',expand=True)
container.grid_rowconfigure(0,weight=1)
container.grid_columnconfigure(0,weight=1)
self.frames = {}
for F in (StartPage,StudentLogin,AdminLogin):
page_name = F.__name__
frame = F(parent=container,controller=self)
self.frames[page_name] = frame
# put all of the pages in the same location;
# the one on the top of the stacking order
# will be the one that is visible.
frame.grid(row=0,column=0,sticky="nsew")
self.show_frame("StartPage")
def show_frame(self,page_name):
'''Show a frame for the given page name'''
frame = self.frames[page_name]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
self.controller = controller
frame = tk.Frame(self,width = 1024,height = 768,bg="teal")
frame.pack(fill="both",expand=True,side="top")
label = tk.Label(frame,text="WELCOME",font=controller.title_font)
label.pack(side="top",fill="x",pady=50)
button1 = tk.Button(frame,text="Admin Login",command=lambda: controller.show_frame("AdminLogin"),width = 50,height=10,font=30,bg='powder blue')
button2 = tk.Button(frame,text="Student Login",command=lambda: controller.show_frame("StudentLogin"),width=50,bg='powder blue')
button1.pack(pady=10)
button2.pack(pady=10)
class AdminLogin(tk.Frame):
def __init__(self,parent)
self.controller = controller
frame = tk.Frame(self,bg='teal')
frame.pack(fill="both",side ="top",expand=True)
label = tk.Label(frame,text="Enter username and password to login",pady=30,padx =10)
userLabel = tk.Label(frame,text = "Enter Username: ",font=50)
userLabel.pack(padx=10,pady=10)
userEntry = tk.Entry(frame)
userEntry.pack(padx=10,pady=10)
passwordL = tk.Label(frame,text = "Enter Password: ",font=50)
passwordL.pack(padx=10,pady=10)
passEntry = tk.Entry(frame,show="*")
passEntry.pack(padx=10,pady=10)
button = tk.Button(frame,text="Back",command=lambda: controller.show_frame("StartPage"),bg='powder blue')
button.pack()
class StudentLogin(tk.Frame):
def __init__(self,padx =10)
button = tk.Button(frame,bg='powder blue')
button.pack()
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
解决方法
不幸的是,您不能同时使用pack方法和grid方法。您只需要选择一个即可在整个母版中使用。 Pack易于使用,但是通过网格,您可以更好地控制窗口小部件在窗口中的显示位置。 (我本来是对您的帖子的评论,而不是回答,但我没有足够的声誉来做到这一点),希望对您有所帮助:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。