admin管理员组

文章数量:1130349

直接上代码:

import pygame

import sys

pygame.init()

screen = pygame.display.set_mode((10,10),0)

screen = pygame.display.set_mode((800,800),0)

screen.fill((255,255,255))

pygame.display.update()

while True:

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()

sys.exit(0)

方案就是,首先启动一个10*10(1*1也行)的小窗口,然后立即启动正常大小窗口。这样几乎完全避免看见启动黑屏的情况。当系统运行缓慢你可能会看到一个小窗口一闪变成了大窗口。

效果如下:https://www.zhihu/video/1184551647086329856

我在树莓派上也进行了多次实验是了,这种效果还可以接受,树莓派上也基本感知不到小窗口的存在。

其实黑屏我是可以忍受,主要是帮知乎好友解决他的问题,顺便自己研究了一下。

还有另一个方案就是结合tkinter,具体代码如下:

import pygame,random

import tkinter as tk

from tkinter import *

import os

root = tk.Tk()

embed = tk.Frame(root, width = 500, height = 500) #creates embed frame for pygame window

embed.focus_set()

embed.grid(column=0,row=0) # Adds grid

uiwin = tk.Frame(root, width = 400, height = 100)

uiwin.grid(row=1,column=0)

os.environ['SDL_WINDOWID'] = str(embed.winfo_id())

os.environ['SDL_VIDEODRIVER'] = 'windib'

pygame.init()

screen = pygame.display.set_mode((500,500))

screen.fill(pygame.Color(255,255,255))

pygame.display.update()

def handle(event):

if embed is not root.focus_get():

embed.focus_set()

embed.bind('',handle)

def game():

if embed is root.focus_get():

for event in pygame.event.get():

if event.type == pygame.KEYDOWN:

r = random.randint(0,255)

g = random.randint(0,255)

b = random.randint(0,255)

screen.fill(pygame.Color(r,g,b))

pygame.display.update()

root.after(1000//60,game)

def draw():

pygame.draw.circle(screen, (0,0,0), (250,250), 125)

pygame.display.update()

button1 = Button(uiwin,text = 'Draw', command=draw)

button1.grid(row=0,column=1)

entry1 = Entry(uiwin,width=45,font=('StSong',14),foreground='green')

entry1.grid(row=0,column=0)

root.after(0,game)

root.mainloop()

直接上代码:

import pygame

import sys

pygame.init()

screen = pygame.display.set_mode((10,10),0)

screen = pygame.display.set_mode((800,800),0)

screen.fill((255,255,255))

pygame.display.update()

while True:

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()

sys.exit(0)

方案就是,首先启动一个10*10(1*1也行)的小窗口,然后立即启动正常大小窗口。这样几乎完全避免看见启动黑屏的情况。当系统运行缓慢你可能会看到一个小窗口一闪变成了大窗口。

效果如下:https://www.zhihu/video/1184551647086329856

我在树莓派上也进行了多次实验是了,这种效果还可以接受,树莓派上也基本感知不到小窗口的存在。

其实黑屏我是可以忍受,主要是帮知乎好友解决他的问题,顺便自己研究了一下。

还有另一个方案就是结合tkinter,具体代码如下:

import pygame,random

import tkinter as tk

from tkinter import *

import os

root = tk.Tk()

embed = tk.Frame(root, width = 500, height = 500) #creates embed frame for pygame window

embed.focus_set()

embed.grid(column=0,row=0) # Adds grid

uiwin = tk.Frame(root, width = 400, height = 100)

uiwin.grid(row=1,column=0)

os.environ['SDL_WINDOWID'] = str(embed.winfo_id())

os.environ['SDL_VIDEODRIVER'] = 'windib'

pygame.init()

screen = pygame.display.set_mode((500,500))

screen.fill(pygame.Color(255,255,255))

pygame.display.update()

def handle(event):

if embed is not root.focus_get():

embed.focus_set()

embed.bind('',handle)

def game():

if embed is root.focus_get():

for event in pygame.event.get():

if event.type == pygame.KEYDOWN:

r = random.randint(0,255)

g = random.randint(0,255)

b = random.randint(0,255)

screen.fill(pygame.Color(r,g,b))

pygame.display.update()

root.after(1000//60,game)

def draw():

pygame.draw.circle(screen, (0,0,0), (250,250), 125)

pygame.display.update()

button1 = Button(uiwin,text = 'Draw', command=draw)

button1.grid(row=0,column=1)

entry1 = Entry(uiwin,width=45,font=('StSong',14),foreground='green')

entry1.grid(row=0,column=0)

root.after(0,game)

root.mainloop()

本文标签: 黑屏启动时摄像头pythonPygame