鱼C论坛

 找回密码
 立即注册
查看: 5126|回复: 32

[已解决]pygame多窗口

[复制链接]
发表于 2023-2-21 19:57:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
居然,pygame 似乎不能多窗口,有没有什么办法,比如线程?

...
screen = pygame.display.set_mode((640, 480))
screeb = pygame.display.set_mode((640, 480))

只有一个screeb窗口……
最佳答案
2023-2-21 20:23:18
本帖最后由 isdkz 于 2023-2-21 20:26 编辑


参考代码:
import pygame
from multiprocessing import Process

def test():
    screen = pygame.display.set_mode((400,400))
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
        pygame.display.flip()

if __name__ == '__main__':
    p_lst = [Process(target=test) for i in range(3)]
    for i in p_lst:
        i.start()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-21 19:59:59 | 显示全部楼层
因为 pygame 使用了单例模式,也就是窗口只会被实例化一次,可以使用多进程解决,多线程不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-21 20:13:23 | 显示全部楼层
isdkz 发表于 2023-2-21 19:59
因为 pygame 使用了单例模式,也就是窗口只会被实例化一次,可以使用多进程解决,多线程不行

就是开很多个程序?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-21 20:23:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-2-21 20:26 编辑


参考代码:
import pygame
from multiprocessing import Process

def test():
    screen = pygame.display.set_mode((400,400))
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
        pygame.display.flip()

if __name__ == '__main__':
    p_lst = [Process(target=test) for i in range(3)]
    for i in p_lst:
        i.start()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-21 20:47:44 | 显示全部楼层


不对,这样主循环似乎不会退出
应该这样
try:
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                raise
        pygame.display.flip()
except:
    pygame.quit()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-21 20:51:31 | 显示全部楼层
歌者文明清理员 发表于 2023-2-21 20:47
不对,这样主循环似乎不会退出
应该这样

主循环不会退出啥意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-21 20:53:07 | 显示全部楼层
isdkz 发表于 2023-2-21 20:51
主循环不会退出啥意思?

虽然窗口关闭了,可 while True 循环没退出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-21 20:58:49 | 显示全部楼层
问题回答:
90% isdkz
10% 别人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-21 20:59:52 | 显示全部楼层
歌者文明清理员 发表于 2023-2-21 20:53
虽然窗口关闭了,可 while True 循环没退出

我不是很懂 pygame,所以不明白你说的 while True 循环没退出什么意思,不过按照代码规范来说 try... except... 不应该随便用

这里我建议可以用 sys.exit
import pygame
from multiprocessing import Process
import sys
import os

def test():
    screen = pygame.display.set_mode((400,400))
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            print('test')
        pygame.display.flip()


if __name__ == '__main__':
    p_lst = [Process(target=test) for i in range(3)]
    for i in p_lst:
        i.start()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-21 21:27:20 | 显示全部楼层
isdkz 发表于 2023-2-21 20:59
我不是很懂 pygame,所以不明白你说的 while True 循环没退出什么意思,不过按照代码规范来说 try... exc ...

平时我不写 try except 的,running = True while running: for event ... 敲得已经很 6 了
sys.exit() 确实是一种方法,目前网上的 pygame 教程大多数都是 sys.exit() 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 07:30:54 | 显示全部楼层
liuhongrun2022 发表于 2023-2-21 20:58
问题回答:
90% isdkz
10% 别人

没有吧,isdkz 是 99.999,刚看到几个新人的贴 isdkz 秒回结果被新人称之为“大神”
确实如此,我第一个贴也是他帮的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 07:31:53 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2023-3-5 07:30
没有吧,isdkz 是 99.999,刚看到几个新人的贴 isdkz 秒回结果被新人称之为“大神”
确实如此,我第一个 ...

是的
昨天一天没上线
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 07:32:37 | 显示全部楼层
liuhongrun2022 发表于 2023-3-5 07:31
是的
昨天一天没上线

总得签个到吧
我有一次半夜才上线,没想到消息都堆满了(20),真…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 07:34:10 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2023-3-5 07:32
总得签个到吧
我有一次半夜才上线,没想到消息都堆满了(20),真…

我倒没你火,顶多八九条消息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 07:35:40 | 显示全部楼层
liuhongrun2022 发表于 2023-3-5 07:34
我倒没你火,顶多八九条消息

我也不知道为什么每次我一发就有人评分,且很多人回复
奇怪这么支持我吗

我开了个小号 三体文明监听员 ,但是无法接受邮箱,你知道怎么弄吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 07:37:02 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2023-3-5 07:35
我也不知道为什么每次我一发就有人评分,且很多人回复
奇怪这么支持我吗


你用的什么邮箱?
我的小号lhr123用的163邮箱啥问题没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 07:38:57 | 显示全部楼层
liuhongrun2022 发表于 2023-3-5 07:37
你用的什么邮箱?
我的小号lhr123用的163邮箱啥问题没有

163啥的要手机号
hotmail微软一直提示我需要家长许可…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 07:41:42 | 显示全部楼层
liuhongrun2022 发表于 2023-3-5 07:37
你用的什么邮箱?
我的小号lhr123用的163邮箱啥问题没有

但是没人注意到我昨天发的帖子…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 07:43:02 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2023-3-5 07:38
163啥的要手机号
hotmail微软一直提示我需要家长许可…

哈哈,家长许可
@学习编程中的Ben 要注册github账号,用的Hotmail邮箱,也要家长许可,他最后用的我的邮箱当做家长
但是发现了一堆问题
如果你的浏览器上登录了这个账号,就会发现其他网址访问不了,非得说“需要你的家长同意”
最后我要从家庭里把他删除,然后他就说
"出错了,请重试。"
真的是服了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 08:16:39 | 显示全部楼层
liuhongrun2022 发表于 2023-3-5 07:43
哈哈,家长许可
@学习编程中的Ben 要注册github账号,用的Hotmail邮箱,也要家长许可,他最后用的我的邮 ...

早知道换个出生日期…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 08:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表