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等函數。分分鐘一個小的智能手錶界面就有了,祝福大家兔年快樂~

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