【问题标题】:Python, Tkinter library, Attribute Error in Object involving GUIPython,Tkinter 库,涉及 GUI 的对象中的属性错误
【发布时间】:2017-04-24 13:31:25
【问题描述】:

我正在为类制作一个非常简单的程序,其中涉及将 GUI 滑块的数量乘以另一个 GUI 滑块的另一个数量。但是,由于某种原因,当我现在运行程序时,我得到一个 AttributeError 说“gui”对象没有属性“slider1”。有任何想法吗?代码如下:

import tkinter
import random

class gui:
    def __init__(self):
       self.main_window = tkinter.Tk()

       #widgets
       self.__canvas = tkinter.Canvas(self.main_window,bg='white',width=300,height=10)

       self.label = tkinter.Label(self.main_window,text=('Product:',0))
       self.slider1 = tkinter.Scale(self.main_window,from_=0, to=12)
       self.slider2 = tkinter.Scale(self.main_window,from_=0, to=12)

       #packs
       self.__canvas.pack()

       self.label.pack(side='top')
       self.slider1.pack(side='left')
       self.slider2.pack(side='right')
       self.button = tkinter.Button(self.main_window,text='Click to multiply',command=self.multiply())
       self.button.pack(side='bottom')

       tkinter.mainloop()

   def multiply(self):
       x = int(self.slider1.get())
       y = int(self.slider2.get())
       num = x*y
       self.label.config(text=('Product:',num))

gui()

【问题讨论】:

  • 我编辑了您的问题,现在可以使用了! @帕克
  • 如果不存在,则无法处理任何元素。在更改/访问之前创建..

标签: python user-interface object tkinter attributeerror


【解决方案1】:

程序中存在一些语法错误,我对此进行了评论。以及您应该在秤上放置方向。这是代码。

import tkinter as tk

class gui:
  def __init__(self):
    self.root = tk.Tk()

    # the widgets
    self.button = tk.Button(self.root, text="Multiply!", command=self.multiply)
    # you need no '()' for the function when inputing it in tkinter.
    self.label = tk.Label(self.root, text="Product: 0") # the '0 must be a string
    self.sliderX = tk.Scale(self.root, from_=0, to=12, orient=tk.HORIZONTAL)
    self.sliderY = tk.Scale(self.root, from_=0, to=12, orient=tk.VERTICAL)
    # add an orient to the scales.

    # now pack the widgets.
    self.button.pack()
    self.label.pack()
    self.sliderX.pack()
    self.sliderY.pack()

  def multiply(self):
    x = int(self.sliderX.get())
    y = int(self.sliderY.get())
    num = str(x * y) # need to turn the int to a string.
    self.label.config(text="Product: "+num)

app = gui()
app.root.mainloop()

它不适合您的原因是没有该程序的实例。这就是我最后要做的。 Python 的垃圾收集收集使用gui() 创建的实例,因此 Tkinter 无法引用该类的实例。

【讨论】:

  • 非常感谢 Preston,您解决了我的问题。我喜欢你的编码风格,比我的简单和整洁。第一行代码是否只是更容易将 tkinter 引用为 tk?
  • 是的,它会导入模块,但名称不同。编译器稍后会更改它,但我们不必担心。
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2021-07-24
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多