【问题标题】:Tix ScrolledListbox not scrollableTix ScrolledListbox 不可滚动
【发布时间】:2013-01-02 11:52:01
【问题描述】:

你好,新年快乐,

我正在尝试构建一个用户界面并拥有一个 Tix.ScrolledListbox 的问题。 (Python 2.6.5、Tix 8.4.3、Windows XP)

我想用它来显示不同数量的项目, 取决于用户之前的选择。

这是一个 GIS 的东西:用户从一个 组合框,按下一个按钮和列表框 显示从属性中检索到的所有字段名 桌子。因此,对于某些层,有 5 个,对于其他层 30 个字段。原则上它是有效的。

但列表框旁边的滚动条仍然存在 灰色无功能。

在一个小测试sn -p,在哪里,按下后 一个按钮,显示随机(0..100)个项目 在列表框中,滚动条起作用。

我不知道。 以前有人吃过吗?

编辑:以下示例代码显示不可滚动 导入arcpy时的scrolledListbox

import Tix  
import random  
import arcpy       

class SampleApp(object):
  def __init__(self):
    self.window = Tix.Tk()
    #listbox
    self.lbx = Tix.ScrolledListBox(self.window, width = 30)
    self.lbx.listbox.insert(Tix.END, " ")
    self.lbx.listbox.bind("<<ListboxSelect>>", self.Choose)

    #button to generate new list
    self.btn = Tix.Button(self.window, text = "new list",
                          command = self.NewList)
    #label shows chosen list item
    self.lbl = Tix.Label(self.window, text = "   ", bg = "white")


    #pack
    self.btn.pack(pady = 10)
    self.lbx.pack(side="top", fill="both", expand=True, pady = 10)
    self.lbl.pack(pady = 10)

    self.window.mainloop()

  #function to generate new listbox items on button command
  def NewList(self):
    self.lbx.listbox.delete(0, Tix.END)
    r = random.randint(1, 30)
    for i in range(r):
        self.lbx.listbox.insert(Tix.END, i)

  #event to show selected item in label
  def Choose(self, event):
    widget = event.widget
    selection = widget.curselection()
    value = widget.get(selection[0])
    self.lbl.config(text = value)


 sa = SampleApp()

【问题讨论】:

  • 欢迎来到 SO。您应该包含一些代码供我们检查问题出在哪里。请将您的代码缩减为重现您的问题的最小脚本并发布。
  • 感谢您的建议。我不确定将代码与我的问题一起发布,因为我使用 ArcGis(arcpy 包和 pyper)并且我认为这有点特别,所以可能没有多少人可以使用它。好吧,当我尝试为帖子准备代码时,我实际上发现了问题。当我放下“import arcpy”时,滚动条可以工作,当我把它放回滚动条时,它仍然是灰色的。
  • 如果你解决了你的问题,你可以考虑写下你自己的答案。顺便说一句,构建一个最小的示例通常会让您发现错误或解决您的问题。
  • 99% 的时间都在尝试将代码缩减为重现问题的最小脚本,从而得到解决方案

标签: python tkinter arcpy tix


【解决方案1】:

您是否将滚动条附加到列表框?

from Tkinter import *

root = Tk()

scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)

listbox = Listbox(root)
listbox.pack()

for i in range(100):
    listbox.insert(END, i)

# attach listbox to scrollbar
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)

mainloop()

盗自:http://effbot.org/zone/tkinter-scrollbar-patterns.htm

编辑:Tix.ScrolledListBox 的工作方式不同,因此不要将其与上述解决方案混为一谈。

【讨论】:

  • 谢谢!我可能得试试这个。
  • 我试过了。但是,当我将此代码与 import arcpy 语句一起使用时,仍然存在奇怪的行为。不知何故,arcpy 导入搞乱了列表框滚动条连接。
  • 我认为这只会让问题变得更糟——Tix.ScrolledListBox 已经有一个附加的滚动条。
  • No =) 没有比这更糟糕的了。我只尝试了上面建议的代码并添加了 import arcpy。但也许这里不是每个人都有 ArcGis 和 arcpy 来尝试。
  • @BryanOakley 感谢您指出这一点 - 编辑了答案
猜你喜欢
  • 1970-01-01
  • 2012-04-26
  • 2014-04-02
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
相关资源
最近更新 更多