使用TkInter与滚动条并排设置两个小部件

问题描述 投票:0回答:1

场景:我有两个较长的字符串字符串,应并排显示以进行比较。我正在尝试使用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}

问题:我怎么做这个多部件单一滚动条?

python python-3.x tkinter
1个回答
3
投票

在标准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()

enter image description here

======================================>

编辑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()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.