不确定我是否在使用组合框之前看到过这种情况,而没有构建自定义组合框。我正在构建自己的ebay蜘蛛,我希望用户能够从一个类别列表中进行选择以爬行查询等。每个类别当然都有自己的子类别。并且您无法在易趣的高级搜索表单中明确选择类别的子类别。但是,您可以使用表单提交请求发送子类别ID,以在该子类别中自动搜索。
在ebays网站上抓取类别后获取所有类别 - >该类别的子类别我基本上有一个字典,看起来像这样:
categories = {main_category_title: [sub_category1, ...., sub_categoryn],
....}
我知道如何通过这样的方式将所有子类别自己列入组合框:
self.categories = ttk.Combobox(self,
values = list(itertools.chain.from_iterable(
(ebay_spider.categories[category] for category in ebay_spider.categories))))
虽然这有效......但它并不是我想要的,因为它不允许用户选择包含每个子类别的主要类别,而且看起来很复杂。
有没有办法列出主要类别及其下面的子类别?最好是缩进。
方法1: 我想到的另一个选择是为每个类别/子类别创建一个带有按钮的文本框,它设置一个包含该值的tk.StringVar,因为我可以用这种方式处理缩进,但如果有一个更简单的方法,则更愿意不必这样做
方法2: 获得所有子类别时,我可以做类似的事情 “”(一些任意数量的空白)+子类别,同时将它们放入列表中。
这是“hackish”imo,当稍后使用它时抓住子类别我必须调用.strip()。这适用于在其他地方使用子类别时必须使用.strip()的警告
答案 0 :(得分:1)
以下是使用2个组合框的快速示例。主类别使用带有跟踪的void Transform::rotateAroundPoint(axis, angle, point)
{
Matrix3x3 mat = createMatrixFromQuaternion(axis, angle);
Transform rotateTransform;
trans.basis = mat; // <- 3x3 matrix
trans.origin = Vector3(0,0,0); // <- Translation vector
// "this" is a pointer to the transform being edited since I decided to write
// this as a member function.
Vector3 pos = this->origin;
this->origin = this->origin - point;
(*this) = rotateTransform * (*this);
this->origin = this->origin + point;
}
// Internally bullet does basically this
resultTransform.basis = t1.basis * t2.basis;
resultTransform.origin = t1.basis * t2.origin + t1.origin;
,以便在更改时更新第二类的值。如果用户输入了类别字典中未找到的内容,则会设置空白值StringVar()
:
'--None--'
还有其他几种方法可以实现这一目标,因此根据您的应用程序,您可能需要查看它们,其中一种方法是使用from Tkinter import *
import ttk
def main_change(*args):
second.set('--None--')
second['values'] = categories.get(main_selected.get(), ['--None--'])
categories = {'Fruit': ['Apples', 'Grapes', 'Bananas'], 'Vegetables': ['Peas', 'Carrots']}
root = Tk()
main_selected = StringVar()
main_selected.trace('w', main_change)
main = ttk.Combobox(root, values=list(categories.keys()), textvariable=main_selected)
main.pack()
second = ttk.Combobox(root, values=['--None--'])
second.pack()
root.mainloop()
的{{1}}方法。