添加多线程:
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()