-1

这是代码:

from tkinter import *
import os

class App:

    charprefix = "character_"
    charsuffix = ".iacharacter"
    chardir = "data/characters/"
    charbioprefix = "character_biography_"

    def __init__(self, master):
        self.master = master
        frame = Frame(master)
        frame.pack()

        # character box
        Label(frame, text = "Characters Editor").grid(row = 0, column = 0, rowspan = 1, columnspan = 2)
        self.charbox = Listbox(frame)
        for chars in []:
            self.charbox.insert(END, chars)
        self.charbox.grid(row = 1, column = 0, rowspan = 5)
        charadd = Button(frame, text = "   Add   ", command = self.addchar).grid(row = 1, column = 1)
        charremove = Button(frame, text = "Remove", command = self.removechar).grid(row = 2, column = 1)
        charedit = Button(frame, text = "    Edit    ", command = self.editchar).grid(row = 3, column = 1)

        for index in self.charbox.curselection():
            charfilelocale = self.charbox.get(int(index))
            charfile = open(app.chardir + app.charprefix + charfilelocale, 'r+')
            charinfo = self.charfile.read().splitlines(0)

现在我想知道的是,如果我要在另一个函数中调用 charinfo,我应该怎么称呼它?我正在使用 Python 3.3,而 app.charinfo 或 self.charinfo 不起作用。如果我的代码不正确,您能帮忙更正一下吗?提前致谢。

4

1 回答 1

0

您当前的实现将其声明为局部变量,因此可以在外部访问。为此,任务需要发生在self.charinfo

当您想charinfo从其他地方访问时
-self.charinfo在类定义内工作,并且
-app.charinfo在类外/从实例工作

for index in self.charbox.curselection():
    charfilelocale = self.charbox.get(int(index))
    charfile = open(app.chardir + app.charprefix + charfilelocale, 'r+')
    # notice the self.charinfo here
    self.charinfo = self.charfile.read().splitlines(0)

最好确保该属性self.charinfo在循环之外可用,以避免在循环 0 次时出错

self.charinfo = None
for index in self.charbox.curselection():
    charfilelocale = self.charbox.get(int(index))
    charfile = open(app.chardir + app.charprefix + charfilelocale, 'r+')
    self.charinfo = self.charfile.read().splitlines(0)
于 2013-08-14T06:26:40.770 回答