鱼C论坛

 找回密码
 立即注册
查看: 2169|回复: 3

关于在Label组件中利用for循环动态显示文字

[复制链接]
发表于 2020-1-31 23:31:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自己编了一个抽签器,“载入数据”可以选择一个txt文件,然后“开始抽签”随机选择文件中的一个姓名。功能已经做到了,
但是我想在抽签的过程中Label里的文字能持续变动,所以想到了for循环,
可是实际情况是,哪怕套上循环,label也只改变一次(循环结束的最终结果)。
哪位大神能帮忙瞅瞅,怎么做到动态变化的效果


  1. """
  2.     功能:实现抽签器功能
  3.     时间:2020.01.31
  4.     版本:2.0
  5.     更新:2.0 添加更多按钮和显示框
  6. """

  7. import tkinter as tk
  8. from tkinter import filedialog
  9. import random as rd
  10. import time


  11. class App:
  12.     def __init__(self, root):
  13.         frame = tk.Frame(root)
  14.         frame.pack()

  15.         self.filename = "0"
  16.         self.v1 = tk.StringVar()
  17.         self.v1.set('抽签器')
  18.         self.bt = tk.Label(frame, textvariable=self.v1, font=("微软雅黑", 20), width=5)
  19.         self.bt.pack(fill=tk.X)
  20.         self.bt = tk.Button(frame, text="载入数据", fg="blue", command=self.addname)
  21.         self.bt.pack(fill=tk.X)
  22.         self.bt = tk.Button(frame, text="开始抽签", fg="blue", command=self.draw)
  23.         self.bt.pack(fill=tk.X)

  24.     def draw(self):
  25.         print("开始抽签,结果是谁!!")

  26.         f = open(self.filename,'r')
  27.         context = f.read().split(',')
  28.         f.close()
  29.         for i in range(10):
  30.             self.v1.set(rd.choice(context))
  31.             time.sleep(0.2)
  32.             print(self.v1.get())

  33.     def addname(self):
  34.         self.filename = filedialog.askopenfilename(defaultextension=".txt",initialdir="*/")
  35.         print("加入姓名!!")


  36. def main():
  37.     root = tk.Tk()
  38.     app = App(root)

  39.     root.mainloop()


  40. if __name__ == '__main__':
  41.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-1 08:35:44 | 显示全部楼层
界面没刷新吧,在PYQT中这样循环只有结束才会刷新界面,要用多线程,这个原理应该一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 10:29:27 | 显示全部楼层
我心Groove 发表于 2020-2-1 08:35
界面没刷新吧,在PYQT中这样循环只有结束才会刷新界面,要用多线程,这个原理应该一样

请问大佬,具体怎么刷新,我记得好像pygame中有管理界面刷新的代码,但是这个程序我最后要打包exe,再添加模块就太大了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 11:24:31 | 显示全部楼层
本帖最后由 lassiter 于 2022-8-2 22:54 编辑
我心Groove 发表于 2020-2-1 08:35
界面没刷新吧,在PYQT中这样循环只有结束才会刷新界面,要用多线程,这个原理应该一样


问题已解决,使用以下网址的方法实现动态刷新
https://blog.csdn.net/u012089823/article/details/83009900

用到TK.after()方法      

通过编写一个“刷新数据函数”,调用tkinter.TK()自带的after函数,如:
  1. def refresh_data():
  2.         # 需要刷新数据的操作
  3.         self.after(10000, self.refresh_data)  # 指按照10000毫秒的频率刷新
复制代码


在调用mainloop函数之前,将这个刷新数据函数调用,则可以实现定时刷新数据功能。


还有一个轻量化模块schedule,可以定时执行任务。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-3 08:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表