【问题标题】:Can I move the pygame game window around the screen (pygame)我可以在屏幕上移动 pygame 游戏窗口吗(pygame)
【发布时间】:2017-11-15 04:08:32
【问题描述】:

在我正在制作的游戏中,我试图在屏幕上移动窗口以进行迷你游戏(不要问),我已经尝试了我看到自己的线程但只找到了 1 个

x = 100
y = 0
import os
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)

import pygame
pygame.init()
screen = pygame.display.set_mode((100,100))

# wait for a while to show the window.
import time
time.sleep(2)

它不起作用 (请记住,我不是很有经验,目前编码是一种爱好)

【问题讨论】:

  • os.environ['SDL_VIDEO_WINDOW_POS'] 仅设置窗口开始的位置。它不会移动已经创建的窗口。在您提供的代码中,窗口应该出现在 (100,0) 的左上角。是吗?

标签: python pygame window movewindow


【解决方案1】:

我找到了一种不使用tkinter 的方法。

如果你调整显示大小,它会跳转到os.environ['SDL_VIDEO_WINDOW_POS']的位置。

x=100
y=0
import os
os.environ['SDL_VIDEO_WINDOW_POS'] = '%d,%d' % (x,y)

#create a display
import pygame
pygame.init()
screen=pygame.display.set_mode((100,100))

#wait before moving the display
import time
time.sleep(2)

#set where the display will move to
x=200
y=200
os.environ['SDL_VIDEO_WINDOW_POS']='%d,%d' %(x,y)

#resize the screen causing it to move to x y set by environ
pygame.display.set_mode((101,100))

#set the size back to normal
pygame.display.set_mode((100,100))

【讨论】:

  • 另外,os.environ['SDL_VIDEO_WINDOW_POS'] 仅向系统建议放置窗口;它可以拒绝这样做。
【解决方案2】:

查看以下代码。我有点结合了两个不同的答案,但如果不使用 Tkinter 似乎会很困难。谢天谢地,我认为 Tkinter 不会过多地妨碍您的应用程序(在这里似乎很容易工作)。

# Moving a pygame window with Tkinter.
# Used code from:
#    https://stackoverflow.com/questions/8584272/using-pygame-features-in-tkinter
#    https://stackoverflow.com/questions/31797063/how-to-move-the-entire-window-to-a-place-on-the-screen-tkinter-python3

import tkinter as tk
import os, random

w, h = 400, 500

# Tkinter Stuffs
root = tk.Tk()
embed = tk.Frame(root, width=w, height=h)
embed.pack()

os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
os.environ['SDL_VIDEODRIVER'] = 'windib' # This was needed to work on my windows machine.

root.update()

# Pygame Stuffs
import pygame
pygame.display.init()
screen = pygame.display.set_mode((w, h))

# This just gets the size of your screen (assuming the screen isn't affected by display scaling).
screen_full_size = pygame.display.list_modes()[0]

# Basic Pygame loop
done = False
while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                done = True

            if event.key == pygame.K_SPACE:
                # Press space to move the window to a random location.
                r_w = random.randint(0, screen_full_size[0])
                r_h = random.randint(0, screen_full_size[1])
                root.geometry("+"+str(r_w)+"+"+str(r_h))

    # Set to green just so we know when it is finished loading.
    screen.fill((0, 220, 0))

    pygame.display.flip()

    root.update()

pygame.quit()
root.destroy()

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多