【问题标题】:Trouble With Classes and Functions类和函数的问题
【发布时间】:2013-06-01 21:04:51
【问题描述】:

我基本上是在为一个基本的 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 然后当我单击确定按钮时我需要运行@987654323 @我不知道这是否是这样做的方法,我只是在尝试各种不同的事情,它说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()

如果有人能把这一切都弄清楚,我开始感到非常困惑,我将非常感谢!

【问题讨论】:

    标签: python class function tkinter pygame


    【解决方案1】:

    问题是return_color 的返回值没有被使用,因为作为命令选项传递的函数的引用用于调用它而不是存储结果。您可以做的是将值作为类的属性存储在return_color 中,并在调用后在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(如果您创建多个自定义对象,您实际上是在创建多个 Tk 元素,这是应该避免的)。

    【讨论】:

    • 我的问题是它告诉我 Custom 实例没有属性 enter1 即使它在类中
    • @ChristianCareaga 那是因为您忘记将它们设置为类的属性:在get_color 中使用self.enter1 = ... 而不是enter1 = ...
    • 好的,我明白了,所以我应该保持按键事件部分相同吗?
    • @ChristianCareaga 如果这是你想要的,我认为它没有任何问题。
    • 好的,我明白了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2012-12-07
    相关资源
    最近更新 更多