Tkinter 滚动条滑块不动?

时间:2021-01-07 21:38:48

标签: python user-interface tkinter slider scrollbar

我正在开发一个 GUI,按下某个按钮会产生一个弹出窗口,该窗口应该显示一个长的、可滚动的文本列表。我在弹出窗口中使用文本小部件来显示此文本。 我添加了一个滚动条,它出现在弹出窗口中就好了。但是,当您尝试滚动时,移动滚动条上的滑块没有任何作用。滑块甚至不动。但是当我使用鼠标滚轮时,文本列表会响应并滚动。请参阅下面分配给我的按钮的命令“bib”的代码:

def bib():
  root = tk.Tk()
  root.title("References")

  h=tk.Scrollbar(root)
  h.pack(side=tk.RIGHT,fill=tk.Y)
  v=tk.Scrollbar(root)

  t=tk.Text(root,width=90, wrap=tk.NONE, yscrollcommand=v.set)

  t.insert(tk.END,"number 1\n")
  t.insert(tk.END,"number 2\n")
  t.insert(tk.END,"number 1\n")
  t.insert(tk.END,"number 2\n")
  t.insert(tk.END,"number 1\n")
  t.insert(tk.END,"number 2\n")
  t.insert(tk.END,"number 1\n")
  t.insert(tk.END,"number 2\n")
  t.insert(tk.END,"number 1\n")
  t.insert(tk.END,"number 2\n")
  t.insert(tk.END,"number 1\n")
  t.insert(tk.END,"number 2\n")
  t.insert(tk.END,"number 1\n")
  t.insert(tk.END,"number 2\n")

  t.pack(side=tk.TOP, fill=tk.X)
  t.configure(font=("Times New Roman", 10))
  v.config(command=t.yview)

  t.mainloop()

2 个答案:

答案 0 :(得分:1)

滚动条及其关联的小部件需要双向通信。您已经创建了从文本小部件到滚动条的单向通信,但不是相反。

水平滚动条的命令需要调用可滚动小部件的xview方法,垂直滚动条的命令需要调用yview方法。

答案 1 :(得分:0)

您创建了两个 Scrollbar - hv - 并显示第一个滚动条 h,但将 Text 分配给第二个滚动条 v你不显示。

您必须将正确的 Scrollbar 分配给 Text

import tkinter as tk

root = tk.Tk()
root.title("References")

# rename `h` to `v`
v = tk.Scrollbar(root)    
v.pack(side=tk.RIGHT, fill=tk.Y)

# rename `v` to `h`
#h = tk.Scrollbar(root)

t = tk.Text(root,width=90, wrap=tk.NONE, yscrollcommand=v.set)

for _ in range(20):
    t.insert(tk.END,"number 1\n")
    t.insert(tk.END,"number 2\n")

t.pack(side=tk.TOP, fill=tk.X)
t.configure(font=("Times New Roman", 10))

v.config(command=t.yview)

t.mainloop()
相关问题