类和函数问题

时间:2013-06-01 21:04:52

标签: python class function tkinter pygame

我基本上是为一个基本的pygame绘图应用程序编写模块。我使用Tk窗口获取自定义颜色的三个颜色值。我有一个文件,打开一个Tk窗口,并询问3个颜色值,但我不知道如何让一切运作良好,我开始感到困惑

这是我的Tk窗口代码:

from Tkinter import *

class Custom():
    def get_color(self):
        root = Tk()
        root.configure(background='black')
        root.wm_title("Custom")

        label1 = Label(root, text='Red Value:',bg="black", fg="white")
        label1.grid(row=2, column=0,columnspan=2)
        enter1 = Entry(root, bg='white')
        enter1.grid(row=3, column=0,columnspan=2)


        label2 = Label(root, text='Green Value:',bg="black", fg="white")
        label2.grid(row=4, column=0,columnspan=2)
        enter2 = Entry(root, bg='white')
        enter2.grid(row=5, column=0, columnspan=2)

        label3 = Label(root, text='Blue Value:',bg="black", fg="white")
        label3.grid(row=6, column=0,columnspan=2)
        enter3 = Entry(root, bg='white')
        enter3.grid(row=7, column=0, columnspan=2)

        btn1 = Button(root, text='OK', command= self.return_color, bg="black",activebackground="green", fg="white")
        btn1.grid(row=14, column=0, columnspan=2)
        label7 = Label(root, bg="black", fg = "white")
        label7.grid(row=15, column=0, columnspan=2)

        enter1.focus()

        root.mainloop()

    def return_color(self):
        try:
            r = str(self.enter1.get())
            g = str(self.enter2.get())
            b = str(self.enter3.get())
        except ValueError:
            window.label7.config(text='Enter Numbers!', fg = "red")
        root.destroy()
        return (r,g,b)

c = Custom()
c.get_color()

它有效但我试图能够导入它所以我做了两个函数并把它们放在一个类但现在我变得困惑我需要运行get_color然后当我点击确定按钮我需要运行return_color我不知道这是否是这样做的方式我只是在尝试各种不同的事情,它说return_color无法使self.enter1.get()与enter2和3相同

这是我给我的抽奖计划的地方:

if key[pygame.K_c]:
    import CustomColor
    c = CustomColor.Custom()
    c.get_color()
    self.color = c.return_color()
如果有人能清楚这一切,我会开始变得非常困惑,我会非常感谢!!

1 个答案:

答案 0 :(得分:3)

问题是没有使用return_color的返回值,因为对作为命令选项传递的函数的引用用于调用它但不存储结果。你可以做的是将值作为类的属性存储在return_color中,并在调用启动mainloop后在get_color中添加一个return语句:

def get_color()
    # Initialize the attributes with a default value
    self.r = ''
    self.g = ''
    self.b = ''
    # ...
    root.mainloop()
    return self.r, self.g, self.b

def return_color(self):
    # Entry.get returns a string, don't need to call to str()
    self.r = self.enter1.get()
    self.g = self.enter2.get()
    self.b = self.enter3.get()
    root.destroy()

在使用颜色之前,您可以检查格式是否正确。然后我建议你用更有意义的名字重命名这些函数;并创建一个Tk元素,撤回它并在你的类中使用Toplevel(如果你创建了多个Custom对象,你实际上创建了多个Tk元素,这是应该避免的)。