2011-03-14 7 views
0

누구나 파이 게임과 Tk를 통합하는 방법을 알고 있습니까? 나는 Tk 형식으로 파이 게임 디스플레이를 운전하려고하는데 어려움을 겪고 있습니다. 다음은 제가 성취하고자하는 일의 간단한 예입니다. 파이 게임 창에서 액션을 트리거하기 위해 Tk 폼에서 입력을 얻으려고합니다. 기본적인 상호 작용을 피하는 방법을 모르겠습니다. 어떤 사람이 이런 종류의 일을 했습니까? 조언?파이썬과 파이 게임 통합하기

# The following code has 2 major problems. 
# 1. The window does not refresh when it is dragged over the pygame field. 
# 2. How to plot variables on the screen when the 'Draw' button is clicked? 

from Tkinter import * 
import os, sys, pygame 
from pygame.locals import * 

pygame.init() 

size = width, height = 1200, 800 
CENTER = width/2, height/2 

class Application(Frame): 

    def draw_circle(self): 
     print "How do I draw a circle at (x,y) radius?" 
     print "Does this code belong here?" 

    def createWidgets(self): 
     myXFrame = Frame(self, bd=2, relief=RIDGE) 
     Label(myXFrame, text='X:').pack(side=LEFT, padx=5) 
     myX = StringVar() 
     Entry(myXFrame, textvariable=myX, bg='white').pack(side=RIGHT, padx=5) 
     myX.set('X') 
     myXFrame.pack(expand=1, fill=X, pady=10, padx=5) 

     myYFrame = Frame(self, bd=2, relief=RIDGE) 
     Label(myYFrame, text='Y:').pack(side=LEFT, padx=5) 
     myY = StringVar() 
     Entry(myYFrame, textvariable=myY, bg='white').pack(side=RIGHT, padx=5) 
     myY.set('Y') 
     myYFrame.pack(expand=1, fill=X, pady=10, padx=5) 

     radiusFrame = Frame(self, bd=2, relief=RIDGE) 
     Label(radiusFrame, text='Radius:').pack(side=LEFT, padx=5) 
     radius = StringVar() 
     Entry(radiusFrame, textvariable=radius, bg='white').pack(side=RIGHT, padx=5) 
     radius.set('radius') 
     radiusFrame.pack(expand=1, fill=X, pady=10, padx=5) 

     self.DRAW = Button(self) 
     self.DRAW["text"] = "DRAW" 
     self.DRAW["fg"] = "red" 
     self.DRAW["command"] = self.draw_circle 
     self.DRAW.pack({"side": "left"}) 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack() 
     self.createWidgets() 

def main(): 
+0

당신은'의 몸을 그리워하는 것 데프 주() :.. ' – Ikke

답변

0

PyToolkit? 당신이 찾고있는 다리처럼 보입니다. 흠, 제외, 아니, 다운로드 링크가 죽은 :-(나는이 시도했습니다

1

있습니다. 주요 아이디어는 root.after(miliseconds, call_back)를 사용하여 타이머 이벤트를 설정하는 것입니다. 이것은 당신의 Tk 프로그램에서 파이 게임 부분을 tirgger 것입니다.

다음은 예입니다

import pygame 
import Tkinter as tk 
from random import randint 
class MyGame: 
    def __init__(self): 
     self.root = tk.Tk() 
     tk.Button(self.root, text='Click Me', command=self.add_point).pack() 

     pygame.display.init() 
     self.screen = pygame.display.set_mode((200, 200)) 
     self.screen.fill(0xffffff) 
     pygame.display.flip() 

     self.cnt = 0 

    def add_point(self, r=20): 
     pygame.draw.circle(self.screen, randint(0, 0xffffff), 
       (randint(10, 190), randint(10, 190)), r) 
     pygame.display.flip() 

    def loop(self): 
     # do logic 
     # do render 
     self.cnt += 1 
     if self.cnt % 10 == 0: 
      self.add_point(3) 
     self.root.after(5, self.loop) 

    def mainloop(self): 
     self.root.after(5, self.loop) 
     self.root.mainloop() 

MyGame().mainloop() 

버튼과 반응 할 것이다 파이 게임 창을 클릭

관련 문제