【问题标题】:Class Variable Retrieval in PythonPython中的类变量检索
【发布时间】:2013-02-22 19:07:08
【问题描述】:

这是我一直在为我已经工作的脚本编写的 GUI。我在这里苦苦挣扎的是检索文本框中的信息。

根据generate 的定义,我可以从listx 中弹出一个名称,但我无法从new_title_box 类的任何实例中获取局部变量entry

from Tkinter import *
import ttk
boxvar=""
folder=""
listx=[]
count = 1
myrow = 1

class new_title_box:
    def __init__(self,name):
        global myrow, count, listx
        self.entry = StringVar()
        self.name = name
        self.name = ttk.Entry(mainframe,width=45,textvariable=self.entry)
        self.name.grid(column=1,row=myrow+1,sticky=(N,W))
        listx.append(name)
        print(listx) ## For debugging to insure that it is working correctly, if it gives output it, this part works
        myrow = myrow + 1
        count=count+1

def make_new(*args):
    new_title_box('box'+str(count))

def generate(*args):
    global listx, boxvar
    while len(listx) > 0:
        boxvar=listx.pop(0)
        print(boxvar) ## For debugging to insure that it is working correctly, if it gives output it, this part works
        folder = boxvar.entry.get() ## Not working here
        print(folder) ## For debugging to insure that it is working correctly, if it gives output it, this part works

root = Tk()
root.title("File Maker")

mainframe = ttk.Frame(root, padding = "50 50 50 50")
mainframe.grid(column = 0,row = 0,sticky = (N, W, E, S))
mainframe.columnconfigure(0,weight=1)
mainframe.columnconfigure(0,weight=1)

add_entry = ttk.Button(mainframe,width=20, text = "add entry", command=make_new)
add_entry.grid(column=2,row=2,sticky=(N,W))
add_entry = ttk.Button(mainframe,width=20, text = "make files", command=generate)
add_entry.grid(column=2,row=3,sticky=(N,W))

root.mainloop()

这是我得到的回溯:

Exception in Tkinter callback 
Traceback (most recent call last): 
  File "C:\Python33\lib\tkinter_init_.py", line 1442, in call 
    return self.func(*args) 
  File "C:\python\SampAqTkinter.py", line 28, in generate 
    folder = boxvar.entry ## Not working here 
AttributeError: 'str' object has no attribute 'entry'

【问题讨论】:

  • boxvar.entry 应该可以正常工作。什么是错误消息或其他“不工作”的症状?
  • Tkinter 回调 Traceback 中的异常(最近一次调用最后一次):调用中的文件“C:\Python33\lib\tkinter_init_.py”,第 1442 行 return self.func(*args) File "C:\python\SampAqTkinter.py", line 28, in generate folder = boxvar.entry ## Not working here AttributeError: 'str' object has no attribute 'entry '

标签: python class textbox tkinter ttk


【解决方案1】:

两个 需要更改以解决您描述的问题:

  1. new_title_box.__init__() 方法更改:
      listx.append(name)
      listx.append(self.name)

  2. generate() 函数中,将:
      folder = boxvar.entry.get() 更改为
      folder = boxvar.get()

【讨论】:

  • 太棒了。那工作得很好。正如您可能看到的那样,我对使用类有点陌生(这是我第一次成功使用类)。非常感谢您的帮助。
  • 是的...可能需要一段时间才能掌握使用类和整个面向对象编程的窍门——不幸的是,使用Tkinter 并不是学习它的最佳方法,因为恕我直言,如果它看起来有点武断的话,很多。
【解决方案2】:

您正在向 listx 附加一个字符串,请使用 self.name 而不是本地字符串 name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    相关资源
    最近更新 更多