【问题标题】:How can I make the Tkinter scrollbar edit live如何使 Tkinter 滚动条编辑实时
【发布时间】:2020-05-05 08:22:30
【问题描述】:

我正在尝试创建一个滚动条,每秒不断添加另一行文本。我希望它能够“实时”工作并继续添加另一行文本。

from tkinter import *
import time

master = Tk()
while True:
    scrollbar = Scrollbar(master)
    scrollbar.pack(side=RIGHT, fill=Y)

    listbox = Listbox(master, yscrollcommand=scrollbar.set)
    listbox.insert(END, "Another line\n")
    listbox.pack(side=LEFT, fill=BOTH)

    scrollbar.config(command=listbox.yview)

    time.sleep(1)

【问题讨论】:

标签: python tkinter scrollbar


【解决方案1】:

您不应该在任何 GUI 框架(任何语言)中使用 while Truesleep,因为它可以阻止 mainloop 并且它无法从系统获取事件,将它们发送到小部件并重绘窗口 - 所以窗口冻结。

每个框架都有一些定期运行代码的方法(即timer)。

tkinter 对此有 root.after(milliseconds, function_name)

#from tkinter import * # PEP8: `import *` is not preferred
import tkinter as tk
import time

# --- function ---

def add_line():
    listbox.insert('end', time.strftime("%H:%M:%S"))
    root.after(1000, add_line)  # run `add_line` again after 1000ms (1s)

# --- main ---

root = tk.Tk()

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side='right', fill='y')

listbox = tk.Listbox(root, yscrollcommand=scrollbar.set)
listbox.pack(side='left', fill='both')

scrollbar.config(command=listbox.yview)

add_line()  # run `add_line` first time

root.mainloop()

【讨论】:

  • 非常感谢,我如何在要求输入后添加一行?例如,python 要求您输入,如果您的输入类似于“是”,它会添加另一行吗?我也可以在滚动条中制作可点击的链接吗?非常感谢。
  • 如果你想使用 GUI 然后学习如何使用Entry + Button 而不是input()。在Entry 中,您可以输入文本,Button 可以运行将文本从Entry 复制到Listbox 的函数。或者简单地创建Button 和文本Yes
  • 您是指列表框中文本中的链接,而不是滚动条中的链接?我不确定您是否可以在 Listbox 中执行此操作,但您可以尝试使用 Text 中的 tags 执行此操作,但如果您有较长文本的链接,那么您将不得不在此文本中自行识别链接 - 并且这可能是个问题。
猜你喜欢
  • 2020-07-07
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2015-04-03
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多