1

私は 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)

正常に動作しますが、3 つの値を 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"

私はそれを微調整してきましたが、異なるエラーメッセージが表示されます。誰かが助けてくれれば、私はそれを感謝します。

4

1 に答える 1

2

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 ウィンドウは、それ自体を再描画したり、最小化したり、他のイベントに応答したりすることはできません。

于 2013-06-02T07:53:51.017 に答える