实现滚动显示数字即输入数字随时更新,输出不会跳变(python)

添加多线程: 

import threading
import tkinter as tk
from tkinter import Entry

class DynamicNumberThread(threading.Thread):
    def __init__(self, start_number=0, step=1, delay=0.1):
        super(DynamicNumberThread, self).__init__()
        self.current_number = start_number
        self.target_number = start_number
        self.step = step
        self.delay = delay
        self.running = True

    def run(self):
        while self.running:
            if self.current_number < self.target_number:
                self.current_number += self.step
                if self.current_number > self.target_number:
                    self.current_number = self.target_number
            else:
                self.current_number -= self.step
                if self.current_number < self.target_number:
                    self.current_number = self.target_number

            # 更新界面
            app.update_gui()

            import time
            time.sleep(self.delay)

    def stop(self):
        self.running = False

class App:
    def __init__(self, root, dynamic_thread):
        self.root = root
        self.root.title("动态数字显示")
        self.dynamic_thread = dynamic_thread

        # 创建输入端口
        self.port_label = tk.Label(root, text="输入端口:")
        self.port_label.pack()

        self.port_entry = Entry(root)
        self.port_entry.pack()

        # 创建当前数字显示标签
        self.number_label = tk.Label(root, text=f"当前数字: {round(dynamic_thread.current_number, 2)}", font=("Helvetica", 16))
        self.number_label.pack()

        # 创建开始按钮
        self.start_button = tk.Button(root, text="开始", command=self.start_thread)
        self.start_button.pack()

        # 创建停止按钮
        self.stop_button = tk.Button(root, text="停止", command=self.stop_thread)
        self.stop_button.pack()

    def start_thread(self):
        try:
            port = float(self.port_entry.get())
            self.dynamic_thread.target_number = port
            self.dynamic_thread.start()
        except ValueError:
            print("请输入有效的数字")

    def stop_thread(self):
        self.dynamic_thread.stop()

    def update_gui(self):
        # 更新当前数字显示
        self.number_label.config(text=f"当前数字: {round(self.dynamic_thread.current_number, 2)}")

# 创建动态增加或减小的线程
dynamic_thread = DynamicNumberThread()

# 创建主窗口
root = tk.Tk()

# 创建应用程序实例
app = App(root, dynamic_thread)

# 启动主循环
root.mainloop()

未添加多线程:

import tkinter as tk
from tkinter import Entry

class DynamicNumberApp:
    def __init__(self, root):
        self.root = root
        self.root.title("动态数字显示")

        # 创建输入端口
        self.port_label = tk.Label(root, text="输入端口:")
        self.port_label.pack()

        self.port_entry = Entry(root)
        self.port_entry.pack()

        # 创建当前数字显示标签
        self.number_label = tk.Label(root, text="当前数字: 0", font=("Helvetica", 16))
        self.number_label.pack()

        # 创建开始按钮
        self.start_button = tk.Button(root, text="开始", command=self.start_thread)
        self.start_button.pack()

        # 创建停止按钮
        self.stop_button = tk.Button(root, text="停止", command=self.stop_thread)
        self.stop_button.pack()

        self.dynamic_thread_running = False
        self.current_number = 0
        self.target_number = 0
        self.step = 1

    def start_thread(self):
        try:
            self.target_number = float(self.port_entry.get())
            self.dynamic_thread_running = True
            self.update_gui()
        except ValueError:
            print("请输入有效的数字")

    def stop_thread(self):
        self.dynamic_thread_running = False

    def update_gui(self):
        if self.dynamic_thread_running:
            if self.current_number < self.target_number:
                self.current_number += self.step
                if self.current_number > self.target_number:
                    self.current_number = self.target_number
            else:
                self.current_number -= self.step
                if self.current_number < self.target_number:
                    self.current_number = self.target_number

            self.number_label.config(text=f"当前数字: {round(self.current_number, 2)}")
            self.root.after(100, self.update_gui)

# 创建主窗口
root = tk.Tk()

# 创建应用程序实例
app = DynamicNumberApp(root)

# 启动主循环
root.mainloop()

 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值