小编Rah*_*hul的帖子

tkinter 应用程序中的 super()

我无法理解这个错误。

在下面的代码中,当我使用时,tk.Frame一切都按预期工作。但是,如果我使用super(),我会抛出一个AttributeError(“应用程序对象没有属性 tk ”)。

class Application(tk.Frame):
   def __init__(self,parent):
       tk.Frame.__init__(self,parent) <----- This works
       # super().__init__(self,parent) <------ This line throws an error
.
.
.

if __name__=='main':
  root=tk.Tk()
  Application(root).pack()
  root.mainloop()
Run Code Online (Sandbox Code Playgroud)

据我了解,super(Application,self).__init__()将调用绑定__init__到实例 MRO 中的类的方法child,即tkinter.Frame我的情况下的类。

我通过打印Application.__mro__和检查来验证这一点。

所以我的问题是,如果 和super().__init__(self,parent)tk.Frame.__init__(self,parent)引用相同的__init__class 方法tkinter.Frame,为什么一个会抛出错误,而另一个会正常工作?我怀疑我对 super() 的工作方式有一些误解。

class tkinter super python-3.x

5
推荐指数
1
解决办法
4536
查看次数

tkinter 的时间选择器

我正在寻找一种在 tkinter 应用程序中实现时间选择器的方法。

我能够使用spinbox小部件并使用@PRMoureu 的精彩答案进行验证来实现这一点(可能不是以最好的方式)。我现在拥有的是这个——

import tkinter as tk

class App(tk.Frame):
    def __init__(self,parent):
        super().__init__(parent)
        self.reg=self.register(self.hour_valid)
        self.hourstr=tk.StringVar(self,'10')
        self.hour = tk.Spinbox(self,from_=0,to=23,wrap=True,validate='focusout',validatecommand=(self.reg,'%P'),invalidcommand=self.hour_invalid,textvariable=self.hourstr,width=2)
        self.reg2=self.register(self.min_valid)
        self.minstr=tk.StringVar(self,'30')
        self.min = tk.Spinbox(self,from_=0,to=59,wrap=True,validate='focusout',validatecommand=(self.reg2,'%P'),invalidcommand=self.min_invalid,textvariable=self.minstr,width=2)
        self.hour.grid()
        self.min.grid(row=0,column=1)
    def hour_invalid(self):
        self.hourstr.set('10')
    def hour_valid(self,input):
        if (input.isdigit() and int(input) in range(24) and len(input) in range(1,3)):
            valid = True
        else:
            valid = False
        if not valid:
            self.hour.after_idle(lambda: self.hour.config(validate='focusout'))
        return valid
    def min_invalid(self):
        self.minstr.set('30')
    def min_valid(self,input):
        if (input.isdigit() and int(input) in range(60) and len(input) in range(1,3)):
            valid = True
        else:
            valid = …
Run Code Online (Sandbox Code Playgroud)

python tkinter

2
推荐指数
1
解决办法
4398
查看次数

标签 统计

tkinter ×2

class ×1

python ×1

python-3.x ×1

super ×1