2017-06-13 316 views
5

在我正在制作的游戏中,我试图在屏幕上移动窗口以进行迷你游戏(不要问),我试过了我看到自己的线程,仅发现1我可以在屏幕上移动pygame游戏窗口(pygame)

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) 

,它不工作 (记住,我不是超级经验和当前的代码作为业余爱好)

+0

'os.environ ['SDL_VIDEO_WINDOW_POS']'只设置窗口的起始位置。它不会移动已经创建的窗口。在你给出的代码中,窗口应该出现在(100,0)的左上角。可以? – pydude

回答

0

退房下面的代码。我把两种不同的答案结合起来,但是如果不使用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()