gpt4 book ai didi

python - 让两个 Python 脚本一起工作

转载 作者:行者123 更新时间:2023-12-01 05:43:20 25 4
gpt4 key购买 nike

我正在使用 pygame 制作一个简单的绘图板程序,这样您就可以定义自己的颜色。我正在使用 tk 窗口来执行此操作,但我不知道如何让它们一起工作。请帮忙,我已经尝试让它工作几个小时了

这是我的 Tk 代码:

from Tkinter import *
r = 0
g = 0
b = 0

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

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


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

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

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

self.enter1.focus()

self.root.mainloop()

def close(self):
self.root.destroy()

def return_color(self):
r = int(self.enter1.get())
g = int(self.enter2.get())
b = int(self.enter3.get())
return (r,g,b)

它工作正常,但我无法让它将三个值返回到我的 pygame 程序。

这是 pygame 片段:

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

当前错误:

Traceback (most recent call last):
File "C:/Python27/Drawpad.py", line 75, in <module>
draw.main()
File "C:/Python27/Drawpad.py", line 69, in main
self.update(screen)
File "C:/Python27/Drawpad.py", line 45, in update
self.color = c.return_color()
File "C:/Python27\CustomColor.py", line 41, in return_color
r = int(self.enter1.get())
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2391, in get
return self.tk.call(self._w, 'get')
TclError: invalid command name ".19783112"

我一直在调整它,但只是收到不同的错误消息。如果有人可以提供帮助,我将不胜感激。

最佳答案

您面临的直接问题是您在 Entry 对象被销毁后尝试访问它们。

您可以非常简单地解决这个问题:

def close(self):
self.r = int(self.enter1.get())
self.g = int(self.enter2.get())
self.b = int(self.enter3.get())
self.root.destroy()

def return_color(self):
return (self.r,self.g,self.b)

发生这种情况的原因是,当您调用 get_color 时,它会调用 self.root.mainloop,这意味着它不可能在 Tk 事件之前返回循环已退出,这意味着调用您的 close 方法,这意味着 self.root.destroy 保证在您调用 return_color 之前发生。

调用一个在 Tk 事件循环上阻塞的函数也会产生其他问题。你的 pygame 事件循环卡在等待 Tk 上。因此,您的 pygame 窗口无法重绘自身、最小化或响应任何其他事件。

关于python - 让两个 Python 脚本一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16880695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com