Python tkinter 如何实现自动滚动的文本框 |
您所在的位置:网站首页 › 滚动文本框如何自动滚动 › Python tkinter 如何实现自动滚动的文本框 |
方案二```pythonimport tkinter as tkfrom tkinter import messageboximport threadingimport queueimport time def down(): for i in range(1, 100): output_queue.put(f"Downloading attachment {i}\n") time.sleep(0.3) return def on_download_click(): try: download_thread = threading.Thread(target=down, args=()) download_thread.start() except Exception as e: messagebox.showerror("消息", "该日期段没有附件下载") def update_output_text(): # 检查队列是否有新的输出内容 while not output_queue.empty(): output_text.insert(tk.END, output_queue.get()) # 如果用户没有手动滚动,或者手动滚动到底部,则自动滚动到底部 if not fm_main.manually_scrolled or output_text.yview()[1] == 1.0: output_text.see(tk.END) # 通过调用 after 方法实现定时刷新 fm_main.after(100, update_output_text) def on_scroll(*args): # 判断滚动条是否在底部 scroll_position = scrollbar.get() if scroll_position[1] == 1.0: fm_main.manually_scrolled = False else: fm_main.manually_scrolled = True def on_mouse_release(*args): on_scroll() def on_key_press(event): if event.keysym in ["Up", "Down", "Left", "Right"]: on_scroll() if __name__ == "__main__": # os.chdir(path) # os.system("ls *.zip |xargs -n1 unzip && rm *.zip") fm_main = tk.Tk() fm_main.title("邮件附件批量下载_v1.0") fm_main.geometry("600x300") fm_main.resizable(0, 0) # 设置窗口 Continuation of the modified code: # 下载按钮 btn1 = tk.Button( fm_main, text="下载", font=("Arial", 13), width=25, height=2, command=on_download_click, ) btn1.pack() scrollbar = tk.Scrollbar(fm_main) scrollbar.pack(side=tk.RIGHT, fill=tk.Y) output_text = tk.Text(fm_main, font=("Arial", 12), width=60, height=10) output_text.pack(side=tk.LEFT, fill=tk.BOTH) output_text.config(yscrollcommand=scrollbar.set) scrollbar.config(command=output_text.yview) # ... 其他代码 ... # 创建队列对象用于线程间通信 output_queue = queue.Queue() # 启动定时刷新函数 fm_main.after(100, update_output_text) # 设置滚动条手动滚动的回调函数 output_text.bind("", on_scroll) output_text.bind("", on_scroll) output_text.bind("", on_scroll) scrollbar.bind("", on_scroll) scrollbar.bind("", on_scroll) scrollbar.bind("", on_scroll) scrollbar.bind("", on_scroll) scrollbar.bind("", on_mouse_release) # 方向键事件绑定 fm_main.bind("", on_key_press) fm_main.bind("", on_key_press) fm_main.bind("", on_key_press) fm_main.bind("", on_key_press) # 标记手动滚动状态的变量 fm_main.manually_scrolled = False fm_main.mainloop()``` |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |