Tkinter上的包装器用于构建更多pythonic ui

uielem的Python项目详细描述


uielem-wrapper over tkinter用于构建更多pythonic ui

有时你只想制作一个快速的用户界面,让一些可视化的任务变得简单 Tkinter是一个快速的ui工具包,永远都是用python打包的。uielem希望为使用Tkinter提供更现代的/pythonic语法。

一个简单的例子:

之前

from Tkinter import Tk, Frame, Label, Listbox, Button, mainloop

tkroot = Tk()
tkroot.title('Kanban')
frame = Frame(tkroot)
frame.pack()
board_frame = Frame(frame)
board_frame.pack(side='top')
for board_name in ["Todo", "Doing", "Done"]:
    inner_frame = Frame(board_frame)
    inner_frame.pack(side='left')
    label = Label(inner_frame, text=board_name)
    label.pack(side='top')
    listbox = Listbox(inner_frame)
    listbox.pack(side='top')
buttons_frame = Frame(frame)
buttons_frame.pack(side='top')
add_button = Button(buttons_frame, text='Add item', command=add)
add_button.pack(side='left')
remove_button = Button(buttons_frame, text='Remove item', command=remove)
remove_button.pack(side='left')

mainloop()

之后

from uielem import UI, uidict
from Tkinter import Tk, Frame, Label, Listbox, Button

uiroot = UI(Tk, name='root', title='Kanban', children=[
           UI(Frame, packside='top', children=[
             UI(Frame, packside='left', name='boards', children=[
               UI(Frame, packside='top', children=[
                 UI(Label, text=board_name),
                 UI(Listbox, name=board_name.lower())])
               for board_name in ["Todo", "Doing", "Done"]]),
             UI(Frame, packside='left', children=[
               UI(Button, text='Add item', command=add),
               UI(Button, text='Remove item', command=remove), ])])])

uiroot.makeelem()
uidict["root"].mainloop()

安装

pip install -r requirements.txt

uielem依赖于undoable

用法和功能

基本模式就是UI(<tkinter elem>, <keyword arguments>, children=[<chidren>])

关键字参数

  • packside=设置所有children的打包端(包含在元素中)。
  • defaulttext=对于Tkinter.Entry设置初始文本。
  • on_*=设置事件回调(并且_替换为-)。因此,传递on_Button_3=func与创建后运行elem.bind('<Button-3>', func)是一样的。
  • set_*=设置创建后的属性值。例如set_title=['title']title='title'具有相同的效果。
  • 其他非特殊关键字参数传递给tkinter元素。

其他功能

  • uidict包含所有命名(name=something)元素,以便于参考。名称必须是全局唯一的(想想svg中的id)。
  • 要从容器中添加和删除子元素,请将其视为列表(使用.append.insert.remove)。
  • 可以通过索引来访问包装器的子类(例如:< })。
  • 包装器可以使用.elem属性访问tkinter对象,tkinter对象可以使用.ui访问包装器。

替代版本

uielem现在相当大,因此summaries文件夹中提供了uielem的两个较轻版本,但它们可能并不总是最新的。

  • simple_uielem.py删除了一些不太常用的特性,比如代码生成。
  • minimal_uielem.py只对生成一次的ui起作用,之后再也没有修改过ui(如示例中所示),但在其他方面完全兼容。同时删除对可撤消的依赖。

它们还用作uielem的体系结构/内部工作的文档。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用文件路径获取文件位置?   java XPath从某个元素后的元素获取文本   具有多个名称空间的JavaDOM   使用hibernate在表别名处出现java意外令牌错误   springdatajpa中的java交叉连接   在firebase中循环时使用java空指针   如何使用java驱动程序执行mongodb getShardDistribution()   swing Java GUI在另一个方法的新窗口中显示文本   java如何使用Google Guava为每个新地图条目设置不同的过期超时?   在视图寻呼机中将数据从活动传递到片段时,找不到id片段的java视图   Java 8 Lambda流筛选器更改值   java为什么在程序中不使用main方法时Eclipse不会显示错误。   java JavaFX文件选择器显示自定义选项   swing Java程序在MAC上未正确运行   java使用Twitter4j发布twitter线程   JMS请求访问被拒绝后,java jedis无法连接到redis   java GETSTATE weblogic命令花费的时间太长,有什么建议吗?   java如何将此代码转换为Racket/Scheme   java如何使用经度和纬度获取地址   java是我的Glassfish设置泄漏内存吗?