https://lawsie.github.io/guizero/start/
1 按键创建和背景
https://lawsie.github.io/guizero/pushbutton/
from guizero import App, PushButton def do_nothing(): print("A picture button was pressed") app = App() button = PushButton(app, image="button.gif", command=do_nothing) app.display()
2创建布局
必须指定 主窗口App(layout="grid")
from guizero import App, PushButton app = App(layout="grid") button1 = PushButton(app, text="1", grid=[0,0]) button2 = PushButton(app, text="2", grid=[1,0]) button3 = PushButton(app, text="3", grid=[2,0]) button4 = PushButton(app, text="4", grid=[0,1]) button5 = PushButton(app, text="5", grid=[1,1]) button6 = PushButton(app, text="6", grid=[2,1]) button7 = PushButton(app, text="7", grid=[0,2]) button8 = PushButton(app, text="8", grid=[1,2]) button9 = PushButton(app, text="9", grid=[2,2]) button0 = PushButton(app, text="0", grid=[1,3]) app.display()
回调函数执行循环任务
https://lawsie.github.io/guizero/blocking/
您必须以不同于您习惯的方式编写基于GUI的程序。如果您想重复执行某项操作,则可以这样做:
-
编写执行所需动作的函数(在此示例中
counter()
) -
设置该函数的回调。您可以安排相同的回调在给定的毫秒数后重复发生(在此示例中
1000
),也可以仅安排一次。
from guizero import App, Text # Action you would like to perform def counter(): text.value = int(text.value) + 1 app = App("Hello world") text = Text(app, text="1") text.repeat(1000, counter) # Schedule call to counter() every 1000ms app.display()
即使这样,有时候依旧会卡,比如一边播放图像,一边打开dh11温湿度(每次打开都要初始化卡几秒),就会带来整体卡
能否引入线程
import threading import time def add(x,y): print(x+y) t = threading.Timer(10,add,args=(4,5)) t.start() time.sleep(2) t.cancel() print("===end===")
销毁桌面
app.destroy()
opencv图片转化PIL然后图片控件显示
from guizero import * import cv2 from PIL import Image import numpy app = App() picture = Picture(app, image="t.png") cam = cv2.VideoCapture(0) cam.set(3, 640) # set video widht cam.set(4, 480) # set video height def pic_show(): ret, img =cam.read() if img is None: return image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) picture.value=image picture.repeat(40,pic_show) # 图片控件重复调用 app.display()
例子1 类的封装
单独的开发
#http://blog.lxx1.com/2961 from guizero import App,Text,TextBox,PushButton,Slider,Picture,Combo #创建窗口 标题 app=App(title="My second GUI app", width=600, height=600) #text 文本 关键字参数的size,font和color welcome_message = Text(app, text="Welcome to my app",grid=[0,0], align="center",size=40, font="Times New Roman", color="lightblue") #TextBox 输入框 my_name = TextBox(app,width=20) #按钮函数 修改文本内容为输入框内容 def say_my_name(): welcome_message.set(my_name.get()) #按钮 update_text = PushButton(app, command=say_my_name, text="修改文本") #滑块函数 修改文本大小 def change_text_size(slider_value): welcome_message.font_size(slider_value) #滑快控件 text_size = Slider(app,command=change_text_size,start = 10,end = 80) #图片 my_cat = Picture(app, image="t.png") film_choice = Combo(app, options=["Star Wars", "Indiana Jones", "Batman"], grid=[0,1], align="left") app.display()
例子2
类的封装
类文件 gui_2_caiji.py
知识点
from guizero import App,Text,TextBox,PushButton,Slider,Picture,Combo class gui_2caiji: def __init__(self): pass def caiji_button(self): self.show_msg1.set('开始采集!') #print('sd') def cancel_button(self): self.show_msg1.set('采集取消!') #print('sss') def init_gui(self): self.app_1caiji=App(layout="grid",title="人脸识别系统采集界面", width=320, height=210) self.id_ = Text(self.app_1caiji, text="唯一编号(纯数字必填)",grid=[0,0], align="center",size=10, font="Times New Roman", color="red") self.id_in = TextBox(self.app_1caiji,grid=[1,0],width=20) self.xueyuan = Text(self.app_1caiji, text="学院",grid=[0,1],size=10, font="Times New Roman", color="black") self.xueyuan_in = TextBox(self.app_1caiji,grid=[1,1],width=20) self.xuehao = Text(self.app_1caiji, text="学号",grid=[0,2], size=10, font="Times New Roman", color="black") self.xuehao_in = TextBox(self.app_1caiji,grid=[1,2],width=20) self.name = Text(self.app_1caiji, text="姓名",grid=[0,3], size=10, font="Times New Roman", color="black") self.name_in = TextBox(self.app_1caiji,grid=[1,3],width=20) self.xingbie = Text(self.app_1caiji, text="性别",grid=[0,4], size=10, font="Times New Roman", color="black") self.xingbie_in = TextBox(self.app_1caiji,grid=[1,4],width=20) self.caiji_button = PushButton(self.app_1caiji, grid=[0,5,1,1],command=self.caiji_button, text="开始采集") self.cannel_button = PushButton(self.app_1caiji, grid=[1,5,1,1],command=self.cancel_button, text="取消") #提示消息 self.show_msg1 = Text(self.app_1caiji, text="请输入密码登陆",grid=[1,6,2,1], size=10, font="Times New Roman", color="red") #self.app_1caiji.display() #jack = gui_2caiji()
调用文件 xxx.py
from gui_2_caiji import gui_2caiji jack = gui_2caiji() jack.init_gui()