Python 通过同一窗口中的tkinter按钮启动/暂停pygame

Python 通过同一窗口中的tkinter按钮启动/暂停pygame,python,tkinter,pygame,embed,Python,Tkinter,Pygame,Embed,为了一个学校项目,我和一个朋友用pygame做了一个游戏。pygame窗口嵌入在tkinter框架中。一旦打开应用程序,游戏立即开始。现在我们想用tkinter的按钮开始和暂停游戏。我很高兴能得到任何帮助,谢谢 import pygame, random, sys from pygame.locals import * from pygame.key import * import tkinter as tk from tkinter import * import os 创建一个tkinte

为了一个学校项目,我和一个朋友用pygame做了一个游戏。pygame窗口嵌入在tkinter框架中。一旦打开应用程序,游戏立即开始。现在我们想用tkinter的按钮开始和暂停游戏。我很高兴能得到任何帮助,谢谢

import pygame, random, sys
from pygame.locals import *
from pygame.key import *
import tkinter as tk
from tkinter import *
import os
创建一个tkinter帧

root = tk.Tk()
root.title("Borderflip")
embed = tk.Frame(root, width = 500, height = 500) #Erzeugt einen 
eingebetteten Rahmen für das Pygame-Fenster
embed.grid(columnspan = (600), rowspan = 500) 
embed.pack(side = LEFT) #Fenster nach rechts
buttonwin = tk.Frame(root, width = 75, height = 500)
buttonwin.pack(side = LEFT)
这是按钮 播放和暂停按钮没有功能

def play_button():

play_button = Button(root,  padx=8, width=18, pady=8, bd=8, font=("Arial", 
26), text="Play", command=play_button)
play_button.pack()

pause_button = Button(root,  padx=8, width=18, pady=8, bd=8, font=("Arial", 
26), text="Pause", command=root.quit)
pause_button.pack()

quit_button = Button(root, padx=8, width=18, pady=8, bd=8, font=("Arial", 
26), text="Quit", command=root.destroy)
quit_button.pack()
tkinter中pygame的集成代码

os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
os.environ['SDL_VIDEODRIVER'] = 'windib'
screen = pygame.display.set_mode((500,500))
screen.fill(pygame.Color(255,255,255))
pygame.display.init()
pygame.display.update()
frame = Frame(root)
frame.pack()
pygame的代码

x = 500 # Breite und Höhe Fenster in Pixel
y = 500

sbreite = 100 # Breite und Höhe Schläger
shöhe = 15

sx = 200 # Definition 
sy = 450

bx = int(x/2)
by = int(y/2)

brad = 15

speed = 0

bxspeed = 1
byspeed = -2

leben = 10

def sblock():
    global speed
    if sx <= 0 or sx >= x-sbreite:
        speed = 0

def ballbewegung():
    global bx,by
    bx += bxspeed
    by += byspeed


def reset():
    global byspeed,bxspeed,leben,bx,by,sx,sy,speed
    sx = 200
    sy = 450

    bx = int(x/2)
    by = int(y/2)

speed = 0

bxspeed = random.randint(-2,2)
if bxspeed == 0:
    bxspeed = 1
byspeed = random.randint(-2,2)
if byspeed == 0:
    byspeed = 2
screen.fill((0,0,0))
pygame.draw.circle(screen, (255,255,0), (bx,by), brad, 0)
pygame.draw.rect(screen, (255,40,0), (sx,sy,sbreite,shöhe), 0)
pygame.display.flip()
pygame.time.wait(1000)
root.update()

def ballblock():
    global byspeed, bxspeed, leben
    if by-brad <= 0:
        byspeed *= -1
    if bx-brad <= 0:
        bxspeed *= -1
    if bx+brad >= x:
        bxspeed *= -1
    if by >= 435 and by <= 440:
        if bx >= sx-15 and bx <= sx + sbreite + 15:
            byspeed *= -1
        else:
            leben -= 1
            reset()
    root.update()

def sbewegung():
    global sx
    sx += speed

while leben > 0:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed = -2
            if event.key == pygame.K_RIGHT:
                speed = 2
screen.fill((0,0,0))
sbewegung()
sblock()
pygame.draw.rect(screen, (255,40,0), (sx,sy,sbreite,shöhe), 0)

ballbewegung()
ballblock()
pygame.draw.circle(screen, (255,255,0), (bx,by), brad, 0)

pygame.display.flip()
pygame.time.wait(5)

print ("haha verloren")

while True:
    pygame.display.update()
    root.update()
x=500#Breite und Höhe Fenster(像素)
y=500
sbreite=100#Breite und Höhe Schläger
舍赫=15
sx=200#定义
sy=450
bx=int(x/2)
by=int(y/2)
布拉德=15
速度=0
bxspeed=1
比速度=-2
勒本=10
def sblock():
全球速度
如果sx=x-sbreite:
速度=0
def ballbewegung():
全球bx,由
bx+=bx速度
按+=按速度
def reset():
全局速度,bxspeed,leben,bx,by,sx,sy,速度
sx=200
sy=450
bx=int(x/2)
by=int(y/2)
速度=0
bxspeed=random.randint(-2,2)
如果bxspeed==0:
bxspeed=1
byspeed=random.randint(-2,2)
如果byspeed==0:
比速度=2
屏幕填充((0,0,0))
pygame.draw.circle(屏幕,(255255,0),(bx,by),布拉德,0)
pygame.draw.rect(屏幕,(255,40,0),(sx,sy,sbreite,shöhe),0)
pygame.display.flip()
pygame.time.wait(1000)
root.update()
def ballblock():
全球速度,bxspeed,勒本
如果by brad=435,by=sx-15和bx 0:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
速度=-2
如果event.key==pygame.K_RIGHT:
速度=2
屏幕填充((0,0,0))
sbewegung()
sblock()
pygame.draw.rect(屏幕,(255,40,0),(sx,sy,sbreite,shöhe),0)
ballbewegung()
ballblock()
pygame.draw.circle(屏幕,(255255,0),(bx,by),布拉德,0)
pygame.display.flip()
pygame.时间.等等(5)
印刷品(“哈哈维伦”)
尽管如此:
pygame.display.update()
root.update()

Tkinter+Pygame不能很好地协同工作,这通常是因为它们的图形库之间存在冲突,以及一个程序在另一个程序处于活动状态时如何休眠

我个人建议从您的项目中删除tkinter,并通过
pygame.sprite.sprite()
构建一个
按钮
类,该类可以与tkinter按钮相同的方式使用。您可以阅读该网站上的文档