Python3 / Tkinter文本“显示行”行为问题

时间:2018-07-01 14:46:47

标签: python tkinter

我正在尝试计算文本框中预填充数据时的实际行数,以及提交表单时的实际行数。

在下面的代码中,启动时它错误地将行数显示为字符(93),但是当您按下计数按钮时,它会从相同的代码执行中显示正确的行数(4)。我想念什么? (我是第一次来这里发布信息,请轻松一点.....)

import tkinter

text="adfa asdfkljds ;das asdjfkds fkldjasf dsf;dlsjfdkls jdkls fjd;lsfjd;ls fjd;lsafj ;dlsfj;asdlf"

def countit():
    print(DE.count('1.0', 'end', 'displaylines')[0])

top = tkinter.Tk()

DE = tkinter.Text(top, height=5, width=30, wrap="word")
DE.pack()
DEButton = tkinter.Button(top, text="count", command=countit)
DEButton.pack()        # WHEN BUTTON IS PRESSED, CORRECT NUMBER IS DISPLAYED

DE.insert("1.0", text)
countit()              # FIRST RUN, INCORRECT NUMBER DISPLAYED

top.mainloop()

1 个答案:

答案 0 :(得分:0)

如果未显示数据,则无法计算

displaylines,因为该值取决于各种因素,例如屏幕分辨率,实际字体(可能与请求的字体不同),大小packplacegrid一次完成小部件的计算并进行计算,依此类推。在将窗口实际映射到屏幕之前,无法确定这些值。

为说明这一点,请在调用top.update()之前立即添加countit(),您会发现该值是第一次正确打印。

一个更好的解决方法是在窗口映射到屏幕之前不调用countit。例如,您可以在创建文本小部件之后添加以下代码行:

DE.bind("<Map>", lambda event: countit())

以上将在窗口小部件映射到屏幕后立即调用countit()