一、Tkinter说明
Tkinter是python的一个自带的GUI控件库,无需我们再行安装,当然,python有很多控件库可用,后面我们视情况进行说明讲解。
二、Tkinter使用示例
(一)主要核心结构
import tkinter as tk #导入GUI设计的工具模块包,并进行了重命名,当然需要根据需要,也可以不重命名
root=tk.Tk() #建立的根程序
root.mainloop() #主循环
根程序的建立,是为了有一个平台,可以用于加挂控件。
(二)控件的加载方式
示例:加载标签
lb=tk.Label(root,text="标签1") #设置标签属性
lb.pack() #将标签加挂到主窗体
先明确一个标签实例,然后通过pack进行加挂动作。
当然,也可以换一种形式表示,如下:
tk.Label(root,text="测试标签").pack(side=tk.LEFT)
两种形式的区别只是需不需要实例化一个对象而已,效果是一样的。个人建议第一种,读起来简单易理解。
(三)几个常用控件的加载
示例:下面是按钮和列表框的,同时,也对整个窗体设置了一个标题为“浅行机器人”
btn=tk.Button(root,text="按钮")
btn.pack(side=tk.LEFT) #加挂到窗体左面
root.title('浅行机器人')
li = ['C', 'python', 'php', 'html', 'SQL', 'java']
movie = ['CSS', 'jQuery', 'Bootstrap']
listb=tk.Listbox(root)
for item in li:
listb.insert(0,item)
listb.pack(side=tk.RIGHT)
(二)控件的消息响应方式
直接一个文本保存和编辑框的示例来看一下:
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
def load1():
with open(filename.get()) as file:
print('hello')
conents.insert(tk.INSERT,"你好123")
conents.insert(tk.INSERT,file.read())
def save1():
with open(filename.get(),'w') as file:
print('hello')
conents.insert(tk.INSERT, "你好123")
file.write(conents.get('1.0',tk.END))
top=tk.Tk()
top.title('Simple Editor')
conents=ScrolledText()
conents.pack(side=tk.BOTTOM,expand=True,fill=tk.BOTH)
tk.Button(text='open',command=load1).pack(side=tk.RIGHT)
tk.Button(text='save', command=save1).pack(side=tk.RIGHT)
filename=tk.Entry()
filename.pack(side=tk.LEFT,expand=True,fill=tk.X)
top.mainloop()
显示的界面如下:
这里ScrolledText()是下面的富文本编辑框。tk.Entry()是需要保存的文件名。command=load1和command=save1是为了关联按钮和模块的代码。模块是真正要执行的代码,conents.get(‘1.0’,tk.END)这个很有意思,是代表从1行0列开始到最后,将conents实例的内容全部进行拷贝。 conents.insert(tk.INSERT,“你好123”)是在富文本编辑框里,插入“你好123”这个想插入的内容. conents.insert(tk.INSERT,file.read())这个是将打开文件里的内容,然后加入到富文本编辑框中。
三、一个打开和保存文件的对话框形式的代码
代码:我们可以直接保存使用
import tkinter as tk
from tkinter import filedialog,dialog
import os
window=tk.Tk()
window.title("浅行机器人")
window.geometry("800x500")#窗口尺寸,中间用x表示
text1 = tk.Text(window, width=80, height=20, bg='red', font=('Arial', 12))#创建一个文本框
text1.pack()
file_path = ''
file_text = ''
def open_file():#
''' 打开文件 :return: '''
global file_path
global file_text
file_path = filedialog.askopenfilename(title=u'选择文件', initialdir=(os.path.expanduser('D:/')))
print('打开文件:', file_path)
if file_path is not None:
with open(file=file_path, mode='r+', encoding='utf-8') as file: file_text = file.read()
text1.insert('insert', file_text) #将文本内容插入到文本框里
def save_file():
''' 保存文件 :return: '''
global file_path
global file_text
file_path = filedialog.asksaveasfilename(title=u'保存文件')
print('保存文件:', file_path)
file_text = text1.get('1.0', tk.END)#表示从第一行第0个字符到最后一个字符全部复制给file_text
if file_path is not None:
with open(file=file_path, mode='a+', encoding='utf-8') as file: file.write(file_text)
text1.delete('1.0', tk.END)
dialog.Dialog(None, {'title': 'File Modified', 'text': '保存完成', 'bitmap': 'warning', 'default': 0,
'strings': ('OK', 'Cancle')})
print('保存完成')
bt1 = tk.Button(window, text='打开文件', width=15, height=2, command=open_file)
bt1.pack()
bt2 = tk.Button(window, text='保存文件', width=15, height=2, command=save_file)
bt2.pack()
window.mainloop()