python漂亮的GUI编程--Apple的学习笔记 一,前言 二,立项 三,效果 四,python源码 五,小结

一,前言

之前看qpc源码联想到了GUI,现在又手痒了,想玩玩GUI了。正好之前看到一个不做的python GUI库,想学习下,那么就做个小项目练习下吧~

二,立项

关于智能手表我们都不陌生,那么它是如何设计切换多层页面的呢,我之前看到过一个blog,写的不错。反正我是没有想到要这么去做,看了那篇blog我豁然开朗,这个方法还是比较方便的。c语言就是数据结构和算法,我看了它的数据结构设计基本就知道他要怎么设计算法逻辑了。所以我本次拿这个python GUI库玩玩智能手表多层界面切换。

typedefstruct
{
    uchar current;
    uchar up;//向上翻索引号
    uchar down;//向下翻索引号
    uchar enter;//确认索引号
    void (*current_operation)();
} key_table;

我设计的只有向下翻页和确认。至于python做类似c语言的结构体和函数指针好像也有很多方法,但是我只熟悉一种class类然后用list追加的方法,先将就用这样的设计思路来仿照c语言吧。因为我的目的是玩玩这个dearpygui的库。

三,效果

在列表中,通过Down按钮被选中的就先加"_",暂时也没变颜色和字体。按ok按钮进入下级菜单或返回上级。



动态效果视频


四,python源码

import dearpygui.dearpygui as dpg

# button
func_index = 0
last_index = 255
class diapTable:
    def __init__(self):
        current = 0
        down = 0
        confirm = 1

    def caller(self, func):
        func()

def fun0():
    dpg.set_value("text item", "Welcome")
    dpg.set_value("text item2", "")
    dpg.set_value("text item3", "")

def fun1():
    dpg.set_value("text item", "Return_")
    dpg.set_value("text item2", "[1]Weather")
    dpg.set_value("text item3", "[2]Music")

def fun2():
    dpg.set_value("text item", "Return")
    dpg.set_value("text item2", "[1]Weather_")
    dpg.set_value("text item3", "[2]Music")

def fun3():
    dpg.set_value("text item", "Return")
    dpg.set_value("text item2", "[1]Weather")
    dpg.set_value("text item3", "[2]Music_")

def fun4():
    dpg.set_value("text item", "Funny")
    dpg.set_value("text item2", "")
    dpg.set_value("text item3", "")

def fun5():
    dpg.set_value("text item", "Big big world")
    dpg.set_value("text item2", "")
    dpg.set_value("text item3", "")

displist = []
displist.append(diapTable())
displist[0].current = 0
displist[0].down = 0
displist[0].confirm = 1
displist[0].caller = fun0

displist.append(diapTable())
displist[1].current = 1
displist[1].down = 2
displist[1].confirm = 0
displist[1].caller = fun1

displist.append(diapTable())
displist[2].current = 2
displist[2].down = 3
displist[2].confirm = 4
displist[2].caller = fun2

displist.append(diapTable())
displist[3].current = 3
displist[3].down = 1
displist[3].confirm = 5
displist[3].caller = fun3

displist.append(diapTable())
displist[4].current = 4
displist[4].down = 4
displist[4].confirm = 2
displist[4].caller = fun4

displist.append(diapTable())
displist[5].current = 5
displist[5].down = 5
displist[5].confirm = 3
displist[5].caller = fun5

# display
dpg.create_context()

def button_callback(sender, app_data, user_data):
    global  func_index,last_index
    if user_data == "down":
        func_index = displist[func_index].down
    elif user_data == "ok":
        func_index = displist[func_index].confirm
    else:
        pass

    if func_index != last_index:
        displist[func_index].caller()
        last_index = func_index

with dpg.window(label="Control", pos=(0,0)):
    # user data and callback set when button is created
    dpg.add_button(label="Down", callback=button_callback, user_data="down")
    # user data and callback set any time after button has been created
    btn = dpg.add_button(label="Ok", )
    dpg.set_item_callback(btn, button_callback)
    dpg.set_item_user_data(btn, "ok")

with dpg.window(label="Display", pos=(100, 0), width=150):
    dpg.add_text("welcome", tag="text item")
    dpg.add_text("", tag="text item2")
    dpg.add_text("", tag="text item3")
    displist[func_index].caller()

dpg.create_viewport(title='Apple Watch demo', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
# below replaces, start_dearpygui()
while dpg.is_dearpygui_running():

    dpg.render_dearpygui_frame()

dpg.destroy_context()

五,小结

这个库看起来显示效果不错。只是我还不清楚如何修改字体颜色或添加button边框,help中只是明显的写了绑定font,没有明显看到color等函数。分分钟一个小的智能手表界面就有了,祝福大家兔年快乐~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章