当前位置: 首页 > 知识库问答 >
问题:

如何将焦点切换到游戏窗口?

范玄裳
2023-03-14

我正在尝试使用pygame制作游戏,最后会弹出一条tkinter消息,显示游戏在消息上,并显示再次玩的选项。

当我按下“再次播放”按钮时,按下该键时,播放器精灵根本不会移动。

然后我发现它正在发生,因为在我按下消息框按钮后,它没有将焦点更改为活动的pygame窗口。

如果有人能告诉我如何更改对焦窗口,那会很有帮助。

共有1个答案

潘宝
2023-03-14

如果您使用Windows,您可以使用win32gui模块,尤其是SetFocus()方法。

例如,下面的程序受此页面的启发,创建了一个tkinter窗口和一个pygame窗口,并将它们交替放在前面。

# -------------------------------
# initialise the front() function

import win32gui

def windowEnumerationHandler(hwnd, windows):
    windows.append((hwnd, win32gui.GetWindowText(hwnd)))

results = []
windows = []
win32gui.EnumWindows(windowEnumerationHandler, windows)

def front(win_name):
    for i in windows:
        if i[1] == win_name:
            win32gui.ShowWindow(i[0],5)
            win32gui.SetForegroundWindow(i[0])
            break

# ------------------------
# create the pygame window

import pygame

class PygameWindow:
    def __init__(self, name):
        self.name = name
        self.window = pygame.display.set_mode((640, 480))
        pygame.display.set_caption(self.name)

    def to_front(self):
        front(self.name)

pygame_window = PygameWindow('This is the pygame window')

# -------------------------
# create the tkinter window

import tkinter

class TkinterWindow:
    def __init__(self, name):
        self.name = name
        self.window = tkinter.Tk()
        self.window.title(self.name)

    def to_front(self):
        front(self.name)

tkinter_window = TkinterWindow('This is the tkinter window')

# ------------------------------------------
# main loop - switch between the two windows

from time import sleep
while True:
    sleep(1)
    pygame_window.to_front()
    sleep(1)
    tkinter_window.to_front()
    
    # update the tkinter window to make it to stay visible
    tkinter_window.window.update()
 类似资料:
  • 卡洛斯·巴罗斯 编辑:也许我应该这么说,但这个游戏是一个类似反击或英雄联盟的游戏,我没有做这个游戏。

  • 使用JavaScript 可以从多个方面增强表单字段的易用性。其中,最常见的一种方式就是在用户填写完当前字段时,自动将焦点切换到下一个字段。通常,在自动切换焦点之前,必须知道用户已经输入了既定长度的数据(例如电话号码)。例如,美国的电话号码通常会分为三部分:区号、局号和另外4 位数字。为取得完整的电话号码,很多网页中都会提供下列3 个文本框: <input type="text" name="te

  • 问题内容: 因此,现在我想弄清楚当框架没有名称或ID时如何将焦点切换到Selenium 2中的框架吗?对于命名框架,我这样做: 但是没有名字呢?有人对此有经验吗? 问题答案: driver.switchTo.frame()被重载以接受框架名称或整数。此int是基于0的可用帧的索引。第一帧为0,第二帧为1,依此类推。 我刚刚使用Java绑定和Firefox对这个HTML页面进行了非常快速的测试。 我

  • 我正在用pyplay写一个蛇游戏,但我只是提示一个黑色的窗口没有任何错误。 我检查了类似的问题,他们错误地使用了screen对象。然而,这里的情况似乎不是这样,因为它只创建了一次? 知道我做错了什么吗?因为我没有收到任何错误信息,所以我不明白为什么只显示一个黑屏。按键输入事件工作正常。

  • 当我的游戏结束时,我试图改变屏幕到游戏结束屏幕,但它没有这样做,只是闪烁当前的游戏屏幕。 游戏结束画面

  • > 我正在将控件从父窗口传递到子窗口 我正在子窗口中执行操作 执行后,将从子窗口再打开一个窗口(第一个子窗口的子窗口)。 我必须关闭两个子窗口并返回父窗口。 我无法将控件从子窗口切换到父窗口。我已经试用了下面的代码 /在子窗口中执行操作/