我正在尝试计算文本框中预填充数据时的实际行数,以及提交表单时的实际行数。
在下面的代码中,启动时它错误地将行数显示为字符(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()
答案 0 :(得分:0)
displaylines
,因为该值取决于各种因素,例如屏幕分辨率,实际字体(可能与请求的字体不同),大小pack
,place
或grid
一次完成小部件的计算并进行计算,依此类推。在将窗口实际映射到屏幕之前,无法确定这些值。
为说明这一点,请在调用top.update()
之前立即添加countit()
,您会发现该值是第一次正确打印。
一个更好的解决方法是在窗口映射到屏幕之前不调用countit
。例如,您可以在创建文本小部件之后添加以下代码行:
DE.bind("<Map>", lambda event: countit())
以上将在窗口小部件映射到屏幕后立即调用countit()
。