消息循环与窗体
会出现一个方框,可以设置大小
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()