GUI界面(包含一个轻量级界面)

消息循环与窗体

会出现一个方框,可以设置大小

import tkinter  #界面库


# win1 = tkinter.Tk()
# win1.title("513")
# win1.geometry("800x600")#设置大小
# win1.minsize(400,400)#窗体最小的范围
# win1.maxsize(800,800)#窗体最大的范围
# win1.mainloop()
#
# win2 = tkinter.Tk()
# win2.title("514")
# win2.geometry("800x600")#设置大小
# win2.minsize(400,400)#窗体最小的范围
# win2.maxsize(800,800)#窗体最大的范围
# win2.mainloop()

class Mywin:
    def __init__(self,title="513",size="800x600",minx=400,miny=400,maxx=800,maxy=800 ):
        self.win = tkinter.Tk()
        self.win.title(title)
        self.win.geometry(size)
        self.win.minsize(minx,miny)
        self.win.maxsize(maxx,maxy)
    def show(self):
        self.win.mainloop()
#阻塞执行
# haoren = Mywin(title="513")
# haoren.show()
# haoren1 = Mywin(title="514")
# haoren1.show()
##并发执行
haoren = Mywin(title="513")
haoren1 = Mywin(title="514")
haoren.show()
haoren1.show()

在这里插入图片描述

输出类

可以看到我们在刚才的表格的基础上添加了几个字

import tkinter

class classOutput(object):
    "用于输出"
    def __init__(self):
        self.win = tkinter.Tk()
        self.win.title("数据输入")
        self.mylist = tkinter.Listbox(self.win,width=100)#构造列表
        self.mylist.pack()#窗体适应列表

    def show(self):
        self.win.mainloop()

    def insert(self,line):
        self.mylist.insert(tkinter.END,line)

myout = classOutput()
myout.insert("123")
myout.show()

在这里插入图片描述

label显示

显示出label

import tkinter
win = tkinter.Tk()
label = tkinter.Label(win , text="wifi设置")#显示在win上
label.place(x = 10 , y =20)
label = tkinter.Label(win , text="密码设置")
label.place(x = 10 , y = 40)
win.mainloop()

在这里插入图片描述

按钮事件

有好几种提示的按钮,下面也写了注释

import  tkinter.messagebox

#tkinter.messagebox.showinfo(title="你好",message="干嘛呢")
#tkinter.messagebox.showwarning(title="支付宝友情提醒",message="你的账户处于危险中")
#tkinter.messagebox.showerror(title="你好",message="快跑")
#ret = tkinter.messagebox.askquestion(title="确认",message="郝仁你好吗")
#ret = tkinter.messagebox.askretrycancel(title="确认",message="郝仁你好吗")
ret = tkinter.messagebox.askyesnocancel(title="确认",message="郝仁你好吗")#多一个取消按钮

if  ret == tkinter.messagebox.YES:
    print("很好")
else:
    print("不是")
# if  ret == True:
#     print("很好")
# else:
#     print("不是")

在这里插入图片描述

图片背景

能看到有两层背景

import tkinter
import tkinter.messagebox#导入弹出对话框

def show():
    tkinter.messagebox.showinfo(title="你好", message="干嘛呢")
win = tkinter.Tk()
bm = tkinter.PhotoImage(file=r"C:\Users\Administrator\Desktop\bat+MINE.png")#代表一张图片
label = tkinter.Label(win, image=bm)

bbm = tkinter.PhotoImage(file=r"C:\Users\Administrator\Desktop\2.png")
bt = tkinter.Button(label,text = "点我", image=bbm,command = show)
bt.place(x=0,y=0)

#label = tkinter.Label(win,text = "hello")#pack的含义就是填充,我输入的图片有多大那么现实的框体就有多大
label.pack()#填充
win.mainloop()

在这里插入图片描述

对话框

还有好几种对话形式

import  tkinter.messagebox

#tkinter.messagebox.showinfo(title="你好",message="干嘛呢")
#tkinter.messagebox.showwarning(title="支付宝友情提醒",message="你的账户处于危险中")
#tkinter.messagebox.showerror(title="你好",message="快跑")
#ret = tkinter.messagebox.askquestion(title="确认",message="郝仁你好吗")
#ret = tkinter.messagebox.askretrycancel(title="确认",message="郝仁你好吗")
ret = tkinter.messagebox.askyesnocancel(title="确认",message="郝仁你好吗")#多一个取消按钮

if  ret == tkinter.messagebox.YES:
    print("很好")
else:
    print("不是")
# if  ret == True:
#     print("很好")
# else:
#     print("不是")

在这里插入图片描述

显示数据列表

import tkinter  #界面库
win = tkinter.Tk() #创建一个窗体
mylist = tkinter.Listbox(win,width=100)
mylist.pack()

for i in [x for x in range(100)]:
    mylist.insert(tkinter.END,i)
 
win.mainloop()#消息循环

在这里插入图片描述

下拉列表

import tkinter
import tkinter.ttk

def go(*arg):
    print(comlist.get())#抓去选择值
win = tkinter.Tk()

comvalue = tkinter.StringVar()#窗体自带的文本变量
comlist = tkinter.ttk.Combobox(win , textvariable = comvalue)#变量关联下拉列表
comlist["values"]=("1","2","3","4")
comlist.current(0)#默认选择当前第一个
comlist.bind("<<ComboboxSelected>>",go)#绑定选择了这个事件
comlist.pack()

win.mainloop()

在这里插入图片描述

接下来是做一个轻量级界面可视化

先做一个输出界面出来,tkinter.Tk()是做出的界面,给上标题跟大小,再添加列表。pack()是让做出来的窗体适应列表

import tkinter

class classOutput(object):
    "用于输出"
    def __init__(self):
        self.win = tkinter.Tk()
        self.win.title("数据输出")
        self.win.geometry("800x800")

        self.mylist = tkinter.Listbox(self.win,width=800,height=800)#构造列表
        self.mylist.pack()#窗体适应列表

    def show(self):
        self.win.mainloop()

    def insert(self,line):
        self.mylist.insert(tkinter.END,line)

#myout = classOutput()
#myout.insert("123")
#myout.show()

因为我们要做3个类别:表格、文本编辑、列表这三个类型的。
先写下文本类型编辑

import tkinter

class classOutput(object):
    "用于输出"
    def __init__(self):
        self.win = tkinter.Tk()
        self.win.title("数据输出")
        self.win.geometry("800x800")

        self.text = tkinter.Text(self.win,width=800,height=800)
        self.text.pack()
    def show(self):
        self.win.mainloop()

    def insert(self,line):
        #linelist = line.split("t")
        self.text.insert(tkinter.INSERT, line)

myout = classOutput()
myout.insert("123")
myout.show()

在这里插入图片描述
再写一个表格类型

# coding=gbk
import tkinter
import tkinter.ttk
class classOutput(object):
    "用于输出"
    def __init__(self):
        self.win = tkinter.Tk()
        self.win.title("数据输出")
        self.win.geometry("800x800")
        self.table = tkinter.ttk.Treeview(self.win,height=800)  # 表格
        self.num = 0
        self.table["columns"] =tuple([str(x) for x in range(21)]) # 表头
        for data in tuple([str(x) for x in range(21)]):
            self.table.column(data, width=80)#表格填写数据data的宽度
            self.table.heading(data, text="data"+str(data))#表格的表头名称
        self.table.pack()

    def show(self):
        self.win.mainloop()

    def insert(self, line):
        linelist = tuple(line.split("\t"))#切割转化为元组
        if len(linelist) == 21:
            self.table.insert("", self.num, text="line"+str(self.num), values=linelist)
            self.num += 1

# myout = classOutput()
# myout.insert("88548	n小姐	女	22	162	本科	未婚	合肥	山羊座	在校学生	普通话,英语	安徽,合肥	面议元/天	初次接触	私人伴游	希望游客素质比较好,相互尊重,出言不逊者请勿扰。比较好奇,没试过。通过连接看到的,所以就注册了。 但请不要一副上帝的样子和我交谈,因为我不指望您那点所谓的费用,我觉得要相处融洽才好。谢谢!  	8:00—23:00	未认证暂不开放或已设置成永久保密	2574230157@qq.com	http://www.banyou.com/	2574230157")
# myout.show()

接下来就是要写怎么所搜内容了
第一件事就是先打开文本,接着设定好文本的属性也就是下拉列表里的三个属性表格、文本编辑、列表,如何寻找,利用while True循环进行解码,如果找到我们输入的findstr不为-1,也就是true那么就打印line并且插入self.myout.insert(line)中(会调用insert类中self.mylist.insert(tkinter.END,line))

import new.classOutput
import new.classOutputtable
import new.classOutputtext

class classSearch(object):
    """搜索类"""
    def __init__(self, path,showtype):
        self.file = open(path,"rb")
        if showtype=="表格":
            self.myout = new.classOutputtable.classOutput()
        elif showtype=="文本编辑":
            self.myout = new.classOutputtext.classOutput()
        else:
            self.myout = new.classOutput.classOutput()#创建一个显示窗体
    def __del__(self):
        self.file.close()
    def show(self):
        self.myout.show()#显示

    def find(self,findstr):
        while True:
            line=self.file.readline()#读取每一行
            if not line :
                break
            line = line.decode("gbk",errors="ignore")
            if line.find(findstr)!=-1:
                print(line)#打印结果
                self.myout.insert(line)#插入数据

最后就是输入了
我们先确定输入框的位置,Entry用来输入单行文本,确定输入文本的开始位置,给一个按钮用于搜索,给一个位置,查询了很多资料,我们在使用界面编程的时候, 有些时候是需要跟踪变量的值的变化,以保证值的变更随时可以显示在界面上。由于python无法做到这一点,所以使用了tcl的相应的对象,也就是StringVar、BooleanVar、DoubleVar、IntVar所需要起到的作用 ,给StringVar变量的赋值使用的是Tuples类型所以之前我们进行表格切割表头的时候填入的信息是以元组的形式进行的,并且插入的文本也是做数据分割的时候linelist也是以元组的形式进行转化的。接下来的combobox是下拉列表,变量关联下拉列表也就是说对文本变量的一个确认,,下拉列表我们设置3个值表格、文本编辑、列表。我们下拉列表默认选择第一个,然后我们绑定一个时间def go ,我们让下拉列表跟go绑定,可以抓取选择值,我们把find的方法加入了button搜索中,所以输出就如下图。

import tkinter
import new.classSearch
import tkinter.ttk


class classInput(object):
    """description of class用于数据输出"""
    def __init__(self):
        self.win = tkinter.Tk()
        self.win.title("数据输入")
        self.win.geometry("400x400+0+0")#+0+0显示到(0,0)位置
        self.entry = tkinter.Entry(self.win)
        self.entry.place(x = 0,y = 0)
        self.button = tkinter.Button(self.win, text = "搜索",command=self.find)
        self.button.place(x=200, y=0)
        self.comvalue = tkinter.StringVar()  # 窗体自带的文本变量
        self.comlist = tkinter.ttk.Combobox(self.win, textvariable= self.comvalue)  # 变量关联下拉列表
        self.comlist["values"] = ("表格", "文本编辑", "列表")
        self.comlist.current(0)  # 默认选择当前第一个
        self.comlist.bind("<<ComboboxSelected>>", self.go)  # 绑定选择了这个事件
        self.comlist.place(x=0 ,y=50)
        self.showtype="表格"
    def show(self):
        self.win.mainloop()

    def go(self,*arg):
        print(self.comlist.get())  # 抓去选择值
        self.showtype=self.comlist.get()
    def find(self):
        print("要搜索的是", self.entry.get())
        mypath = r"F:\尹成python1782G\4.尹成22天python进阶\8.二进制数据处理\nasa.txt"
        mytest = new.classSearch.classSearch(mypath,self.showtype)
        mytest.find(self.entry.get())
        mytest.show()
win = classInput()
win.show()

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Light Gui的新特性。 1图层和绘图: 支持多图层,使用与有多图层支持的处理器平台。 支持多图层的软件模拟,支持图层的alpha合并和滑动。 同时支持多种颜色格式的图层,如ragb8888模式、rgb565模式、256色调色板模式。 对每个图层,支持双缓存(double buffer)模式,内部进行了窗口剪切优化。 也支持直画(direct draw)模式,支持内存设备,两者可以配合使用。 支持图层和窗口之前的映射,支持一组窗口动态切换显示到不同大小、不同颜色格式的图层。 支持窗口旋转90度、180度、270度,无需硬件支持。 2风格支持: 支持css风格配置,代码中设置控件的类名,就可以和css配置配合使用。 支持css配置控件不同状态的背景属性,如图片、填充色;前景属性,如图片、颜色;字体属性,如大小、颜色;边框属性,如宽度、颜色、调色板位图、补白等。 支持css配置窗口的一些基本属性,如高宽,透明等。 支持皮肤特性,皮肤的属性包括图标、css配置和调色板位图。 支持多种皮肤,支持在线切换皮肤。 3window模拟器支持: 支持完整的window模拟器,使用visual studio 2005,可以独立于设备,在window环境编写界面代码。 全部由C代码编写,自带基本的C函数库,数学函数库,可以在window,嵌入式设备间无缝移植。 模拟器带来良好的调试特性,界面的相关bug,可以方便的在模拟器上调试,极大的加快软件的开发进度。 支持内存调试模式,可以方便的追踪内存越界,泄漏等问题。 4xml支持: 自带xml解释器,配置文件都使用xml编写,有很好的可读性。 实现了基于xml配置文件的多国语言支持,支持在线切换语言。 5简明易用的控件: 自带多种基本的控件,包括静态文本框、按钮、单行和多行编辑框、列表框、进度条、滚动条、图片、等等。 支持自定义控件,控件代码清晰、简明、容易编写。支持组合控件、对话框控件。配合皮肤配置,能快速实现美工效果和风格。 支持一些较复杂的控件,如文本控件、html显示、软件盘等 6良好的应用移植性 自带基本的C函数库,数学函数库等,可以方便的移植程序库和应用程序。 Light Gui的弱点: 实时性能不是Light GUI强项,不建议使用在实时性要就很高的环境。 在使用风格属性的情况下需要有系统盘的支持,用于存放配置文件和资源。 Light Gui目前是一个图形开发包,没有跨任务的窗口管理系统。 目前只有ucos(增强型,支持系统盘),linux,window平台的移植版本。 Light Gui使用的场合: 需要使用图形库快速实现自有风格的嵌入式设备,比如消费电子设备的二次开发,UI设计。 需要使用Light Gui特性的window程序设计。 Light Gui的商业模式: Light Gui是商业收费软件。 提供软件定制服务。 提供自主设计所需的源代码和库。 Light Gui 的其他特性 Light Gui 主要针对嵌入式操作系统,如嵌入式linux, uC/OS-II 等提供支持。在这些 OS 上,Light Gui 支持以多线程模式运行。其主要技术特性描述如下。 1) 硬件适配性: 可支持各种 32 位处理器架构,如 ARM、MIPS、PowerPC、Blackfin等。 支持各种灰度,彩色显示设备。 可支持各种输入设备,键盘(Keypad)、触摸屏、遥控器等等。 2) 资源消耗: Light GUI 的静态存储随配置选项的不同而不同,最少需占用 800K 静态存储空间。 Light GUI 启动后,初始占用动态存储空间最小为128k。建议系统内存为 2MB 以上。 3) 操作系统适配性: 目前支持uC/OS-II 等操作系统,也可以运行在 Linux/uClinux 操作系统之上,Light GUI自带基础的c函数库,可以方便的移植到支持frambuffer的设备上。 针对嵌入式系统的特殊支持,包括一般性的 I/O 流操作,字节序相关函数等。 4) 窗口子系统特性: 完备的任务内窗口机制和消息传递机制。 5) 图形子系统特性: 提供有增强 GDI 函数,包括光栅操作、复杂区域处理、椭圆、圆弧、多边形以及区域填充等函数。 在提供有兼容于 C99 规范的数学库平台上,还提供有高级二维绘图函数。 通过 Light GUI 的图形抽象层及图形引擎技术,我们也可以让上述高级 GDI 接口在低端显示屏上实现。 各种流行图像文件的支持,包括 Windows BMP、GIF、JPEG、PNG 等(JPEG

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青灯有味是儿时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值