IT菜dog 2022-09-20 18:13 采纳率: 55.6%
浏览 59
已结题

python(GUI thinter) 利用button停止当前运行函数

问题遇到的现象和发生背景

我在写一个带界面的python(GUI)编程的过程中遇到了一个问题,例如:有两个按钮一个是“开始”一个是“停止”。点了开始之后会运行绑定好的函数,为了让这个函数一直循环的跑,我加了个while循环。在点击开始程序已经运行的过程中,我想如果当我要停止下来时,点击“停止”按钮就会终止当前运行的函数。所以我一开始的思路是,在while循环里面加了个条件(while state == True),当我点击停止时使得state = False。但是不行,我点停止的时候它会报一个“未响应”给我。有没有朋友知道该怎么写

以下是部分相关的代码

class Application(Frame):

    def createWidegt(self):
        self.btn04 = Button(self, text='开始投注', command=self.start_betting_for, state='disabled')
        self.btn04.pack(side='left')
        self.btn06 = Button(self, text='立即停止', command=self.stop_now)
        self.btn06.pack(side='left')

    def stop_now(self):
        global state
        state = False

    def start_betting_for(self):
        global cookies
        global account
        global number
        global state

        while state == True:
            for i, j, k in zip(cookies, account, number):
                txt = self.start_betting(i, k)
                if txt == '请求成功':
                    print(f'账户{j}:投注成功')
                else:
                    print(f'账户{j}:{txt}')
            time.sleep(90)
            print('--' * 20)


    def start_betting(self, cookie, number):
        # 投注请求头
        headers_betting = {
            'Host': 'd015.appapi01.com',
            'accept-language': 'zh-CN,zh;q=0.8',
            'user-agent': 'yicai/1.0.10 (Android 9; Xiaomi_MI 8) [com.tfx.yicai_1.0.10_1010]',
            'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
            'content-length': '170',
            'accept-encoding': 'gzip',
            'cookie': cookie,
        }

        data_betting = {
            'oooForce': 'false',
            'text': f'[{{"code": "1972", "compress": "false", "content": "{number},-,-,-,-", "issue":"", "lottery": "hash60ssc", "method": "dw", "methodType": 1, "model": "li", "multiple": 1}}]'
        }

        # 投注接口
        url_betting = 'https://d015.appapi01.com/api/game-lottery/add-order'

        # 发起投注请求
        response_betting = requests.post(url=url_betting, headers=headers_betting, data=data_betting)
        value = json.loads(response_betting.text)  # 将响应数据格式转换
        return value['message']
相关截图

img

img

我想要达到的结果

看看有没有什么办法,先提前谢谢你们了

  • 写回答

3条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-09-20 18:43
    关注

    用定时器来写,把while循环那一段改成下面这样再试试,注意after定时器的单位是毫秒,因为你使用time.sleep暂停了90秒,所以用定时器的话就是90000

    if state:
        for i, j, k in zip(cookies, account, number):
            txt = self.start_betting(i, k)
            if txt == '请求成功':
                print(f'账户{j}:投注成功')
            else:
                print(f'账户{j}:{txt}')
        print('--' * 20)
        self.after(90000,self.start_betting_for)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 修改了问题 9月20日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。