【问题标题】:Python Tkinter -- object has no attribute 'tk'Python Tkinter——对象没有属性'tk'
【发布时间】:2019-12-25 13:49:00
【问题描述】:

我正在使用 tkinter 创建一个 gui,我需要使用登录窗口和后续窗口,我无法在新窗口上放置任何标签,因为它说“testclass”对象没有属性“tk”

我的主要目标是在登录后创建一个新窗口并隐藏登录窗口,然后使用新窗口并放置标签并创建一个表单

from tkinter import *
import tkinter.messagebox as tm


class LoginFrame(Frame):

    def __init__(self, master):
        super().__init__(master)

        self.label_username = Label(self, text="Username")
        self.label_password = Label(self, text="Password")

        self.entry_username = Entry(self)
        self.entry_password = Entry(self, show="*")

        self.label_username.grid(row=0, sticky=E)
        self.label_password.grid(row=1, sticky=E)
        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)

        self.logbtn = Button(self, text="Login", command=self._login_btn_clicked)
        self.logbtn.grid(columnspan=2)

        self.pack()


    # def verifycred(self,username,password):


    def _login_btn_clicked(self):
        username = self.entry_username.get()
        password = self.entry_password.get()

        # verify_out = self.verifycred(username,password)

        self.newWindow = Toplevel(self.master)
        self.app = randomclass(self.newWindow)

class randomclass(LoginFrame):

    def __init__(self,master):
        self.master = master
        self.master.title("Random Class")
        self.master.geometry("1350x750+250+150")
        self.master.config(bg ='cadet blue')
        self.frame = Frame(self.master, bg = 'powder blue')
        self.frame.pack()

        self.test = Button(self.frame,text='Random',width = 25, command = self.random)
        self.test.grid(row=4,column=0)



    def random(self):
        self.newWindow = Toplevel(self.master)
        self.app = testclass(self.newWindow)
class testclass(LoginFrame):

    def __init__(self,master):
        self.master = master
        self.master.title("Test")
        self.master.geometry("1350x750+250+150")
        self.master.config(bg ='cadet blue')
        self.frame = Frame(self.master, bg = 'powder blue')
        self.frame.pack()

        self.welcome = Label(self,text='Hello')
        self.welcome.grid(row=0,column=1)



root = Tk()
lf = LoginFrame(root)
root.mainloop()

【问题讨论】:

  • 您忘记在 testclass 的标签小部件中添加 self.master 。这只是一个小问题。您还必须将网格布局应用于 testclass 框架。因为剩下的标签是在网格布局中定义的。
  • 如果我看起来像个菜鸟,我很抱歉,但我就是这样。你能告诉我在哪里编辑代码吗?非常感谢你
  • 我编辑了它,现在错误显示为 _tkinter.TclError: cannot use geometry manager grid inside .!toplevel.!toplevel 已经有由 pack 管理的 slave
  • 将框架小部件布局更改为网格。

标签: python tkinter


【解决方案1】:

只有一个小问题是你忘记在 testclass 的标签小部件声明中编写 self.master。

这是解决方案,

class testclass(LoginFrame):

def __init__(self,master):
    self.master = master
    self.master.title("Test")
    self.master.geometry("1350x750+250+150")
    self.master.config(bg ='cadet blue')
    self.frame = Frame(self.master, bg = 'powder blue')
    self.frame.grid(row = 0,column = 0)

    self.welcome = Label(self.master,text='Hello')
    self.welcome.grid(row=0,column=1)

【讨论】:

  • 登录成功后如何隐藏登录框而不杀死程序
  • 非常感谢,它现在工作了,唯一剩下的就是隐藏登录屏幕
  • 为此,您只需定义一个函数,将登录数据附加到特定列表,然后销毁该登录窗口。
  • 您在派生类中缺少 super().__init__()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
相关资源
最近更新 更多