python - Tkinter - 在禁用的文本框中拖动鼠标停止更新()

标签 python python-3.x tkinter

我正在制作一个使用某种小部件的程序,该小部件从用户端列出“不可编辑”和“不可选择”的数据行。

小部件还应该有一个滚动条,所以我的小部件选项在我的理解中有点受限。

此外,该应用程序显示不断更新的数字。

我选择了一个文本框 - 但是,当我按住左键单击并将鼠标移过文本框时,root.update() 会停止/等待。

我在下面写了一些示例代码来演示这种现象。

import time
from tkinter import *

class App:
    def __init__(self):
        self.root = Tk()
        self.root.geometry("500x500")
        self.root.resizable(False, False)

        self.main_frame = Frame(self.root)
        self.main_frame.grid(row = 0, column = 0, sticky = "news")

        self.main_text_box = Text(self.main_frame)
        self.main_text_box.grid(row = 0, column = 0, sticky = "news")
        self.main_text_box.tag_configure("bold", font = "Helvetica 50")
        self.main_text_box.insert(END, "Example text", "bold")
        self.main_text_box.configure(state = DISABLED)

    def update(self):
        self.root.update()


def main():
    application = App()
    time_start = time.time()
    while True:
        application.update()
        print("Program running, {} seconds since start".format(
            round(time.time() - time_start, 3)))

if __name__ == "__main__":
    main()

当用户将鼠标拖过文本框时,打印语句在

while True:

等待 root.update()。

基本上,我的问题是:如果将鼠标拖过禁用的文本框,是否有任何方法可以不让 root.update() 等待?

(注意 - 我是这个网站的新手,所以如果我不清楚或其他什么,请指出我在我的问题中可以做得更好的地方:))

谢谢!

编辑:抱歉,我忘了说我正在使用 update() 因为在我的实际程序中(我没有发布 b/c 它有 800 多行),我还有其他非 tkinter update() 方法在 while 循环中,以便我可以在每一帧更新其他数据。

最佳答案

您不需要使用 update() 管理 tkinter 实例的循环,mainloop() 会为您做这件事。

相反,让我们在类继承自 Tk() 的地方编写此代码,然后将时间打印函数作为类的一部分。我们还可以使用 after() 来更新打印。最后,我们应该将 time_start 设置为要在我们的时间函数中使用的类属性。

import time
import tkinter as tk


class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.geometry("500x500")
        self.resizable(False, False)

        self.time_start = time.time()

        self.main_frame = tk.Frame(self)
        self.main_frame.grid(row = 0, column = 0, sticky = "news")

        self.main_text_box = tk.Text(self.main_frame)
        self.main_text_box.grid(row = 0, column = 0, sticky = "news")
        self.main_text_box.tag_configure("bold", font = "Helvetica 50")
        self.main_text_box.insert("end", "Example text", "bold")
        self.main_text_box.configure(state = "disabled")
        self.time_check()

    def time_check(self):
        print("Program running, {} seconds since start".format(round(time.time() - self.time_start, 3)))
        self.after(100, self.time_check)

if __name__ == "__main__":
    my_app = App()
    my_app.mainloop()

关于python - Tkinter - 在禁用的文本框中拖动鼠标停止更新(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51638082/

相关文章:

字符串列表中的 Python 子字符串列表

python - 获取 ipdb 的 IPython 选项卡完成

python - 将一堆代码变成循环Python

python - 在 python 中使用 str.format() 女巫类

python - ValueError:无效的文件路径或缓冲区对象类型:<class 'tkinter.StringVar'>

python - 按下 tkinter 按钮即可调用函数

Python C api - 函数重载

安装了Python3.5但pip3指向python3.6

python - 对触发新流程的函数进行单元测试

python-3.x - 如何使用Selenium检索WebElement的文本-Python