场景:我有两个较长的字符串字符串,应并排显示以进行比较。我正在尝试使用TkInter将垂直滚动条粘贴到每个滚动条上,同时将水平滚动条粘贴一次。
问题:我能够在两个不同的小部件中并排插入内容,并且能够在两个小部件中插入垂直滚动条。但是我无法插入一个同时滚动两个小部件的水平滚动条
到目前为止的代码:
import tkinter as tk
root = tk.Tk()
S1 = tk.Scrollbar(root)
template1 = tk.Text(root, height=100, width=100)
S1.pack(side=tk.RIGHT, fill=tk.Y)
template1.pack(side=tk.RIGHT, fill=tk.Y)
template1.config(yscrollcommand=S1.set)
template1.insert(tk.END, file1data)
S2 = tk.Scrollbar(root)
template2 = tk.Text(root, height=100, width=100)
S2.pack(side=tk.RIGHT, fill=tk.Y)
template2.pack(side=tk.RIGHT, fill=tk.Y)
template2.config(yscrollcommand=S2.set)
template2.insert(tk.END, file2data)
S3 = tk.Scrollbar(root)
template3 = tk.Text(root, height=100, width=100)
S3.pack(side=tk.RIGHT, fill=tk.Y)
template3.pack(side=tk.RIGHT, fill=tk.Y)
template3.config(xscrollcommand=S3.set)
template3.insert(tk.END)
tk.mainloop()
数据示例(file1data和file2data都只是长字符串寿命):
file1data = {qUdYzh5H5ilpZZQ6gFklTt3JFy8rTy2QSGQip0blDWj18VIkxBEAHTL18xf1S1tGbmvb0laqYx1gTsrDa3nnkTR6KstOWvJiWpY4v308Mtw5NIEq8sYRt0mFoR0WzHVvak7RmOHR0v3VijwfPRGBq93nIsTxGJVuvWYnPGUDXciuS650s6pbdOtzKaSKaWf2jFFAIBEgwpWNTrQSLkKgg0h5eA8IYdnrrroXsak3Oiq3asU7tThnUPps1rRl2oXe
8e0ZxkWL34kjB1cX3lGae7ixys7nRUQJYiFWUeVsE19u31gPxxy5mzrf9bgkP055Dk5Oquwyeg0tWBsIeMatJd1cgm5cbsgXwM0wuBjeKTFg6MCWQCSFrUpVlr0Uz3ZNEOCDKVePhGDSOJnNbe6Qvx41GeDIRBXdVw12PrD8QWAGK2OPQ5FfwgObBmMV3cEYlQJGNgXowTICaUfNQRfpuGN5CnoksIQ4E4MaOv13dnIpUPXWc3QCu1bf3cmhNoUP
rXcxVi7ZkJ8AtvtRrdZSNUU34msnNrFIPNBoJmqkZTr7E3QCMHyMfZbVQwaThO5q1OCfOA2oZ26VZHzZamTXGleHVXoARH0OQ0XFZsYwwz8tnWqtPuAzAVcjJtdUNxrPbKFlPei1MzschurpyvTwe9pi86oKp1P72XDUhnvJ3kAfRj1kjxSeQFEGX28Op0PtOzoc2taGlgyLO5THiLruSnLNBVKZMt9wBefu4vtjB8riD7itodprVoT960YlDGgQ
dY93hAPuyb8O6qn3olYbrm0Hp65XpSRZoWjo09XhEjVbC7chDWoUWjcrqMVZibcwxAx4HOHJgUrL3QU10U3FQP0JvYCTJkdR5OxLQCWrBCylU43FNEUuGgqnyPWH6nADtI6euwHpFowX4SfMKXBzdWv7ROuJ6QMxypYwo2wLA7yy9AaimVZOfFOnXwd7GNsYGfM4Cdsq4I0WsSgJLUPQeQTj5Xs8E9sp8Y8ykOHSebI7frQagRKgwRAUila0ERBn}
问题:我怎么做这个多部件单一滚动条?
在标准Tkinter中,这些方法和选项具有标准名称;滚动条应在以下情况下调用小部件的xview或yview方法:滚动条已更改,并且小部件提供了xscrollcommand和yscrollcommand滚动条时调用的命令选项需要更新。
此处阅读更多:http://effbot.org/zone/tkinter-scrollbar-patterns.htm
滚动条需要调用一个函数,该函数调用两个小部件的yview
方法:
def viewall(*args):
template1.yview(*args)
template2.yview(*args)
S4 = tk.Scrollbar(root, command=viewall)
S4.pack(side=tk.RIGHT, fill=tk.Y)
编辑:两个文本小部件的滚动同步-水平
import tkinter as tk
root = tk.Tk()
file1data = ("qUdYzh5H5ilpZZQ6gFklTt3JFy8rTy2QSGQip0blDWj18VIkxBEAHTL1\n8xf1S1tGbmvb0laqYx1gTsrDa3nnkTR6KstOWvJiWpY4v308Mtw5NIEq8sYRt0mFoR0WzHVvak7RmOHR0v3VijwfPRGBq93nIsTxGJVuvWYnPGUDXciuS650s6pbdOtzKaSKaWf2jFFAIBEgwpWNTrQSLkKgg0h5eA8IYdnrrroXsak3Oiq3asU7tThnUPps1rRl2oXe8e0ZxkWL34kjB1cX3lGae7ixys7nRUQJYiFWUeVsE19u31gPxxy5mzrf9bgkP055Dk5Oquwyeg0tWBsIeMatJd1cgm5cbsgXwM0wuBjeKTFg6MCWQCSFrUpVlr0Uz3ZNEOCDKVe\nPhGDSOJnNbe6Qvx41GeDIRBXdVw12PrD8QWAGK2OPQ5FfwgObBmMV3cEYlQJGNgXowTICaUfNQRfpuGN5CnoksIQ4E4MaOv13dnIpUPXWc3QCu1bf3cmhNoUPrXcxVi7ZkJ\n8AtvtRrdZSNUU34msnNrFIPNBoJmqkZTr7E3QCMHyMfZbVQwaThO5q1OCfOA2oZ26VZHzZamTXGleH\nVXoARH0OQ0XFZsYwwz8tnWqtPuAzAVcjJtdUNxrPbKFlPei1MzschurpyvTwe9pi86oKp1P72XDUhnvJ3kAfRj1kjxSeQFEGX28Op0PtOzoc2taGlgyLO5THiLruSnLNBVKZMt9wBefu4vtjB8riD7itodprVoT960YlDGgQdY93hAPuyb8O6qn3olYbrm0Hp65XpSRZoWjo09")
def viewall(*args):
template1.xview(*args)
template2.xview(*args)
xscrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL)
xscrollbar.grid(row=1, columnspan=2, sticky=tk.N + tk.S + tk.E + tk.W)
xscrollbar.config(command=viewall)
template1 = tk.Text(root, height=50, width=50,wrap=tk.NONE, xscrollcommand = xscrollbar.set)
template1.grid(row=0, column=0)
template1.insert(tk.END, file1data)
template2 = tk.Text(root, height=50, width=50,wrap=tk.NONE, xscrollcommand = xscrollbar.set)
template2.grid(row=0, column=1)
template2.insert(tk.END, file1data)
tk.mainloop()
======================================>
编辑2
import tkinter as tk
root = tk.Tk()
file1data = ("qUdYzh5H5ilpZZQ6gFklTt3JFy8rTy2QSGQip0blDW j18VIkxBEAHTL1\n8xf1S1tGbmvb0laqYx1gTsrDa3 nnkTR6KstOWvJiWpY4v308Mt w5NIEq8sYRt0mFoR 0WzHVva 7RmOHR0v3Vi jwfPRG Bq93nIsTxGJV uvWY nPGUDXciuS650s6pbd OtzKaSKa Wf2jFFAIBEgw pWNTrQSLk Kgg0h5eA8IYd nrrroXsak3Oiq3asU7tThnUPps1rRl2oXe8e0ZxkWL34kjB1cX3lGae7ixys7nRUQJYiFWUeVsE19u31gPxxy5mzrf9bgkP055Dk5Oquw yeg0tWBsIeMatJd1cgm5cbsg XwM0wuBjeKTFg6MCWQCSFrUpVlr0Uz3ZNEOCDKVe\nPhGDSOJnNbe6Qvx41GeDIRBXdVw12PrD8QWAGK2OQ4E4MaOv13dnIpUPXWc3QCu1bf3cmhNoUPrXcxVi7ZkJ\n8AtvtRrdZSNUU34msnNrFIPNBoJmqkZ Tr7E3QCMHyMfZbVQwaThO5q1OCfOA2oZ26VZHzZamTXGleH\nVXoARH0OQ0XFZsYwwz8tnWqtPuAzAVcjJtdUNxrPbKFlPei1MzschurpyvTwe9pi86oKp1P72XDUhnvJ3kAfRj1kjxSeQFEGX28Op0PtOzoc2taGlgy")
def viewall(*args):
template1.xview(*args)
template2.xview(*args)
xscrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL)
xscrollbar.grid(row=1, columnspan=4, sticky=tk.N + tk.S + tk.E + tk.W)
xscrollbar.config(command=viewall)
S1 = tk.Scrollbar(root)
S1.grid(row=0, column=1,sticky=tk.N + tk.S + tk.E + tk.W)
template1 = tk.Text(root, height=25, width=50,wrap=tk.NONE, xscrollcommand = xscrollbar.set, yscrollcommand=S1.set)
template1.grid(row=0, column=0)
template1.insert(tk.END, file1data)
S1.config(command=template1.yview)
S2 = tk.Scrollbar(root)
S2.grid(row=0, column=3,sticky=tk.N + tk.S + tk.E + tk.W)
template2 = tk.Text(root, height=25, width=50,wrap=tk.NONE, xscrollcommand = xscrollbar.set,yscrollcommand=S2.set)
template2.grid(row=0, column=2)
template2.insert(tk.END, file1data)
S2.config(command=template2.yview)
tk.mainloop()