wqqxxx 发表于 2022-8-20 00:24:03

关于tkinter两个text组件绑定一个滚动条的问题

    我用tkinter写了一个文本编辑器,用text控件做了一个显示行数的侧边栏
   
    为了把侧边栏, 显示文本的text控件, 滚动条三者的滚动绑定在一起,我写了三个函数分别绑定这三个控件的滚动事件:



def all_yview(*args):# y_bar 的滚动回调函数,同时设置text 和text0的位置
    self.text.yview(*args)
    self.text0.yview(*args)

def all_set0(*args):# text0 的纵向滚动回调函数,同时设置text 和 y_bar的位置
    self.y_bar.set(*args)
    self.text.yview_moveto(args[0])

def all_set(*args):# text 的纵向滚动回调函数,同时设置text0 和 y_bar的位置
    self.y_bar.set(*args)
    self.text0.yview_moveto(args[0])
self.text0.config(yscrollcommand=all_set0)
self.text.config(yscrollcommand=all_set)
self.y_bar.config(command=all_yview)


图片如下:
herbivory.cn/wqx/1.png

    但是实际滚动时,text0和text的滚动总是会逐渐出现差距



herbivory.cn/wqx/2.png
herbivory.cn/wqx/3.png

   (ps:)我觉得这可能是tkinter自己的问题,光写python没法解决,但出于强迫症,我还是把他提问到论坛了,希望有遇到一样情况的老哥前来讨论

qq1151985918 发表于 2022-8-20 02:10:56

from tkinter import *

root = Tk()
root.geometry("750x430")
root.title("PyText")

def mw(event):
    label.yview_scroll(int(-1*(event.delta/120)), "units")
    text.yview_scroll(int(-1*(event.delta/120)), "units")
    return "break"

def sc(*arg):
    label.yview(*arg)
    text.yview(*arg)

sb = Scrollbar(root, command=sc)
sb.place(x=730, y=5, width=15, height=420)
sb.bind("<MouseWheel>", mw)

label = Text(root, font=("宋体", 12), bg="#F3F3F3", yscrollcommand=sb.set)
label.place(x=5, y=5, width=25, height=420)
label.bind("<MouseWheel>", mw)

text = Text(root, font=("宋体", 12), yscrollcommand=sb.set)
text.place(x=30, y=5, width=695, height=420)
text.bind("<MouseWheel>", mw)

for i in range(1, 100):
    label.insert(INSERT, str(i) + "\n")
    text.insert(INSERT, str(i) + "\n")
   
root.mainloop()

螃谢本谢 发表于 2022-8-20 10:24:02

{:10_245:}{:10_245:}{:10_245:}{:10_245:}{:10_245:}{:10_245:}{:10_245:}{:10_245:}{:10_245:}{:10_245:}

wqqxxx 发表于 2022-8-20 11:45:12

已解决, 原因是两个text控件高度相差一个字符导致同样的滚动比率滚动到的位置不一样
页: [1]
查看完整版本: 关于tkinter两个text组件绑定一个滚动条的问题