2013-06-02 2 views
1

Я делаю простую программу для рисования с pygame, и я делаю это так, чтобы вы могли определить свой собственный цвет. Я использую окно tk для этого, но я не могу понять, как заставить их работать вместе. Пожалуйста, помогите, я пытался получить эту работу в течение нескольких часовПолучение двух сценариев Python для совместной работы

Вот мой 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" 

Я подкорректировали его, но только получать различные сообщения об ошибках. Если кто-то может помочь, я был бы признателен.

+1

Если вы разместите свои сообщения об ошибках, скорее всего, кто-то поможет вам. –

+1

У меня была тонна, потому что я изменил свой код так много – Serial

+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 не может перерисовываться, сводить к минимуму или отвечать на любые другие события.

+0

спасибо за ответ, но я думаю, что, как вы, siad, возможно, было бы легче сделать это, используя pygame. Спасибо. – Serial

Смежные вопросы