我试图创建一个程序,它有一个tkinter窗口打开,然后当你按下一个按钮,它关闭tkinter窗口,打开一个pyplay窗口。然而,当我点击按钮打开pyplay窗口时,它会打开pyplay窗口,而tkinter窗口保持打开状态。
代码:
import tkinter as tk
import pygame
root = tk.Tk()
btn = tk.Label(root, text="Start")
btn.bind("<Button-1>", lambda x: root.quit())
btn.pack()
root.mainloop()
root.destroy()
win = pygame.display.set_mode((500, 500))
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
win.fill((255, 255, 255))
pygame.display.update()
pygame.quit()
我还尝试使用:
btn.bind("<Button-1>", lambda x: root.destroy())
btn.bind("<Button-1>", root.quit)
btn.bind("<Button-1>", root.destroy)
btn.bind("<Button-1>", lambda: root.quit())
btn.bind("<Button-1>", lambda: root.destroy())
def start(event=None):
root.quit()
btn.bind("<Button-1>", start)
我怎样才能解决这个问题?(我正在MacOS 11.1上运行Python 3.7.7)
我尝试在一个类中组织你的代码,所以对它进行修改并调用单个组件会更容易一些。
除此之外,我将您的btn
更改为使用tk。按钮
而不是tk。标签
(认为在上下文中更有意义)
实际的切换函数调用self.tk_root.withdraw()
命令。这有效地隐藏了根tk窗口-您可以通过调用self.tk_root.deiconify()
使其再次出现。如果您还希望在隐藏根后销毁它,您可以简单地在撤回后添加一个self.tk_root.destroy()
。
编辑:如果draw()
不适合您,请尝试使用iconify()
。
import tkinter as tk
import pygame
class TkPygame:
def __init__(self):
self.tk_root = tk.Tk()
self.make_tk_widgets()
self.tk_root.mainloop()
def make_tk_widgets(self):
btn = tk.Button(self.tk_root, text='Start', command=self.toggle_to_pygame)
btn.pack()
def toggle_to_pygame(self):
self.tk_root.withdraw()
self.make_pygame_window()
def make_pygame_window(self):
pygame_root = pygame.display.set_mode((500, 500))
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame_root.fill((255, 255, 255))
pygame.display.update()
pygame.quit()
TkPygame()
我无法复制这个问题。但是,我建议使用tkinter窗口创建函数或类。按下键而不是在主循环退出后调用destroy
。如果应用程序已被销毁,调用destroy
命令将导致错误,例如,如果手动关闭窗口。
import tkinter as tk
import pygame
def runTk():
root = tk.Tk()
btn = tk.Label(root, text="Start")
btn.bind("<Button-1>", lambda x: root.destroy())
btn.pack()
root.mainloop()
runTk()
win = pygame.display.set_mode((500, 500))
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
win.fill((255, 255, 255))
pygame.display.update()
pygame.quit()
我正在使用Pygame模块制作一个简单的游戏。我需要Tkinter窗口与Pygame窗口一起打开。 每当我试图打开两个窗口时,第二个窗口只有在我杀死第一个窗口后才会打开。 现在,我能想到的唯一解决方案是使用多线程。但是,我无法实现它。 我该怎么做呢?我真的很感激这里的帮助。谢谢你!
所以我正在用pygame做一个游戏,我也想用tkinter。我在tkinter窗口中嵌入了一个pygame窗口,但我似乎什么都做不了。 对于上下文,以下是完整的代码: 当我使用时,什么都不会发生。在类中使用pyplay是有效的,但是在我更复杂的游戏中,为所有变量使用self.variable似乎是不必要的。 如何在window类之外的pygame窗口中运行代码?
主要内容:创建一个空白窗口,设置窗的位置主窗口控件(window)是一切控件的基础,它好比是一台高速运转的机器,而其他控件则相当于这台机器上的部件,比如齿轮、链条、螺丝等等。由此我们知道,主窗口是一切控件的基础,所有的控件的都需要通过主窗口来显示。 Tkinter 提供了一些关于主窗口对象的常用方法,在本节对这些方法做简单的介绍。 创建一个空白窗口 Tkinter 能够很方便地创建一个空白窗口,示例代码如下: 程序运行结果如下: 图1:
我刚刚花了相当多的时间来寻找pygame的64位安装,以便与Python3.3一起使用(这里),现在我正在尝试创建一个窗口。然而,尽管窗口打开得很好,但当它按下x按钮时并没有关闭。事实上,我必须关闭闲置关闭窗口。我正在运行Win7的64位版本。这是我的密码: 当我附加 它仍然没有关闭。我唯一的猜测就是那个游戏。退出可能会进入其中一个循环,但即使解决了这个问题,我还是更愿意在需要时关闭窗口。
我写了一个小GUI程序与python在tkinter的窗口。我的窗口必须在全屏游戏窗口的前面。 此刻,我用这句话: 它适用于普通窗口(浏览器,浏览器,...),但如果我启动游戏到全屏模式,我的窗口隐藏在游戏后面。 为什么会发生这种情况?调用游戏可能类似于覆盖我的属性的? 我的问题还有别的解决办法吗?也许可以告诉windows,我的窗口应该在特定窗口(游戏窗口)的前面?
我正在为平台游戏做教程,但我的Pygame窗口显示一个黑屏。 我不知道怎么解决这个问题。 我尝试再次关闭和打开Visual Studio Code,但没有任何结果。