GUI:使用TkInter

时间:2016-05-08 11:14:37

标签: python user-interface tkinter

对不起,如果完整的基本问题。我正在使用TkInter完成我的第一步,尝试开发一个视频库的GUI界面(我确实有使用WPF / XAML,MVVM范例,在某种程度上使用html / css的经验)。

我想要一个自定义元素的水平列表,可滚动。每个元素都有视频数据,包括元数据(长度,比特率等),图片(缩略图)和一些动作按钮(播放,删除,标记等)。理想情况下,我也想要拖动句柄,重新排列视频的顺序。

我正在寻找,但无法找到,与WPF中的元素相同,与数据和模板的绑定。这甚至存在于Tk中,还是对于便携式免费框架的要求过于雄心勃勃?

即使模板不存在于Tk中,我仍然可以通过手动填充父控件来管理(例如类似于HTML的元素 - 每个都有很多控件) - 但我无法事件找到任意小部件的列表。

是否存在双向绑定(例如,将项目添加到项目列表中,应该自动更新UI)?

Tk是正确的方向吗?底层逻辑是在python中,所以我正在寻找一个python友好的解决方案。使用WPF的Iron Python将是一个显而易见的解决方案,但我想要是可移植的,而且Iron Python目前的状态并不是很有前景,而且我使用的是Iron Python不支持的库。

1 个答案:

答案 0 :(得分:0)

制作自定义元素的最常用方法是子类Frame。您可以在该框架中放置任何您想要的内容(图像,按钮等),然后您可以将整个内容视为单个GUI元素。

import Tkinter as tk
...
class CustomElement(tk.Frame):
    def __init__(self, parent, meta, image_file, ...):
        tk.Frame.__init__(self, parent)
        # <create widgets for image, metadata, etc here>

然后,您可以创建一个自定义窗口小部件,作为这些项的容器。例如,您可以使用画布,这样可以轻松地将此对象水平放置,并可以附加滚动条。

最后,tkinter拥有一个强大的事件管理系统,可以通过拖放操作来移动。本身没有任何内置的拖放操作,但您可以创建自己的抓取手柄和自定义绑定以进行单击和释放以实现它。

有关使用鼠标在画布上移动内容的示例,请参阅以下答案:https://stackoverflow.com/a/6789351/7432