0

我基本上是在为一个基本的 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()

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

4

1 回答 1

3

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

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 元素,这是应该避免的)。

于 2013-06-01T21:23:04.007 回答