类和函数有问题

2024-06-24 13:47:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我基本上是在为一个基本的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()相同输入2和3

这里是我给我的画板程序的地方:

if key[pygame.K_c]:
    import CustomColor
    c = CustomColor.Custom()
    c.get_color()
    self.color = c.return_color()

我开始很困惑,如果有人能澄清这一切,我会非常感谢!!你知道吗


Tags: textselfgetreturncolumnrootgridcolor
1条回答
网友
1楼 · 发布于 2024-06-24 13:47:24

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

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元素,将其撤消,并在类中使用顶级(如果您创建多个自定义对象,实际上是在创建多个Tk元素,这是应该避免的)。你知道吗

相关问题 更多 >