求助!python中如何用更改变量值控制线程~~~

各位前辈老师好,我是新人,思路和代码有不合理处,请指点或忽略,谢谢。

说问题!

我想用 更改变量的值,影响线程的执行,

例如:

if display_of is 'home': 

        pygame.display.update()

当 display_of = 'farm'时,上面那条语句就不执行。

但结果却让我失望。

下面会列出两个案例, 案例1是实际遇到的问题,我估计代码可能有问题,于是新建了案例2做测试。

请感受我的感受:

案例1:

1.进程场景1,单击‘捕鱼’。

2.运行了一个线程的进度条。

 

3.进度条运行同时,移动鼠标到‘小猫农场’并点击,切换场景。

4.场景切换后,之前线程的进度条还在运行并显示。

我想了想,是否可以用一个变量开关display_of,更改赋值来控制进度条的刷新。

例如:

display_of = 'home'

if display_of is 'home':

        pygame.display.update()

当切换场景时,马上display_of  = 'farm',发现并没有什么用,进度条一直在走。

我质疑了我的代码,于是新建了案例2做测试。

案例2:

# =====================================================

# 导入模块

import pygame, time, threading

# =====================================================

# 游戏初始化

pygame.init()
window = pygame.display.set_mode((1440, 720))
pygame.display.set_caption('小猫种地v2.0')
pygame.display.flip()

# =====================================================

# 设置变量开关

dis_of = 'home'

# =====================================================

# 数字循环,这里相当于进度条了,0~99

def num():
    global dis_of
    image = pygame.image.load('XM_image/bg_home.png')
    font = pygame.font.Font('font/simhei.ttf', 120)
    for a in range(0, 100):
        text = font.render('{}%'.format(a), True, (255, 0, 0))
        window.blit(text, (150, 150))
        time.sleep(0.005)
        if dis_of is 'home':
            pygame.display.update()
            window.blit(image, (0, 0))

# =====================================================

# 场景01

def sc_01():
    global dis_of
    dis_of = 'home'
    image = pygame.image.load('XM_image/bg_home.png')
    window.blit(image, (0, 0))
    pygame.display.update()
    threading.Thread(target=num).start()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.MOUSEBUTTONUP:
                sc_02()
            if event.type == pygame.QUIT:
                exit()

# =====================================================

# 场景02

def sc_02():
    global dis_of
    dis_of = 'farm'
    image = pygame.image.load('XM_image/bg_farm.png')
    window.blit(image, (0, 0))
    pygame.display.update()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.MOUSEBUTTONUP:
                sc_01()
            if event.type == pygame.QUIT:
                exit()

# =====================================================

# 设置主程序

def main():
    sc_01()

# =====================================================

# 运行主程序

main()

说结果

1.程序运行后,显示场景01和一个红色的变化数字

2.在数字变化同时,点击屏幕,切换到场景02,此时问题出现了,数字变化是停住了,但还是有一个数字停留在屏幕上。

3.在场景01点击屏幕,马上会运行场景02,这时dis_of = 'farm',场景01那个数字按理说不会显示啊。但好在数字变化是停住了。

4.那么案例1为啥会一直有个进度条在走呢?

问题总结:

案例1和案例2,同样是更改变量值控制线程中if条件执行,但结果完全不同。

这其中,一定有我未知的知识点,忽略了或者根本不会。

我脑子很乱,不知道从哪把程序进行下去。

恳请大神有时间的话讲几句,点点我,拜托了,感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值