五、tkinter图形界面(二)
总要坚持一些事情~
12、树状表格
import tkinter
from tkinter import ttk
root = tkinter.Tk()
root.title("Menu菜单右键")
root.geometry("800x400+150+150")
tree = ttk.Treeview(root)
tree.pack()
tree["columns"] = ("姓名", "年龄", "身高", "体重")
tree.column("姓名", width=100)
tree.column("年龄", width=100)
tree.column("身高", width=100)
tree.column("体重", width=100)
tree.heading("姓名", text="姓名-name")
tree.heading("年龄", text="年龄-age")
tree.heading("身高", text="身高-height")
tree.heading("体重", text="体重-weight")
tree.insert("", 0, text="line1", values=("孙畅", "27", "170", "160"))
root.mainloop()
13、树状数据
from tkinter import ttk
root = tkinter.Tk()
root.title("树状数据")
root.geometry("300x300+150+150")
tree = ttk.Treeview(root)
tree.pack()
treeF1 = tree.insert("", 0, "中国", text="中国CN", values=("F1"))
treeF2 = tree.insert("", 1, "俄国", text="俄国RU", values=("F2"))
treeF3 = tree.insert("", 2, "法国", text="法国FR", values=("F3"))
treeF4 = tree.insert("", 3, "美国", text="美国US", values=("F4"))
treeF5 = tree.insert("", 4, "英国", text="英国EN", values=("F5"))
treeF1_1_1 = tree.insert(treeF1, 0, "吉林", text="吉林", values=("F1_1_1"))
treeF1_1_2 = tree.insert(treeF1, 0, "辽宁", text="辽宁", values=("F1_1_2"))
treeF1_1_3 = tree.insert(treeF1, 0, "黑龙江", text="黑龙江", values=("F1_1_3"))
treeF1_2_1 = tree.insert(treeF1_1_1, 0, "长 春", text="长 春", values=("F1_2_1"))
treeF1_2_2 = tree.insert(treeF1_1_2, 0, "沈 阳", text="沈 阳", values=("F1_2_2"))
treeF1_2_3 = tree.insert(treeF1_1_3, 0, "哈尔滨", text="哈尔滨", values=("F1_2_3"))
root.mainloop()
14、右键菜单(menubar形式)
import tkinter
root = tkinter.Tk()
root.title("Menu右键菜单")
root.geometry("300x300+150+150")
menubar = tkinter.Menu(root)
menu = tkinter.Menu(menubar, tearoff=False)
language = ["C", "C++", "Java", "Python", "php", "JS", "退出"]
for item in language:
menu.add_command(label=item)
menubar.add_cascade(label="语言", menu=menu)
def showMenu(event):
menubar.post(event.x_root, event.y_root)
root.bind("<Button-3>", showMenu)
root.mainloop()
15、combobox
import tkinter
from tkinter import ttk
root = tkinter.Tk()
root.title("combobox控件")
root.geometry("300x300+150+150")
v = tkinter.StringVar()
com = ttk.Combobox(root, value=("河南", "河北", "山东"), textvariable=v)
com.current(0)
def func(event):
print(com.get())
com.bind("<<ComboboxSelected>>", func)
com.pack()
root.mainloop()
16、frame控件
import tkinter
root = tkinter.Tk()
root.title("Frame控件")
root.geometry("300x300+150+150")
frm = tkinter.Frame(root)
frm.pack()
frm_1 = tkinter.Frame(frm)
tkinter.Label(frm_1, text="左上", bg="pink").pack(side=tkinter.TOP)
tkinter.Label(frm_1, text="左下", bg="blue").pack(side=tkinter.TOP)
frm_1.pack(side=tkinter.LEFT)
frm_2 = tkinter.Frame(frm)
tkinter.Label(frm_2, text="右上", bg="black").pack(side=tkinter.TOP)
tkinter.Label(frm_2, text="右下", bg="red").pack(side=tkinter.TOP)
frm_2.pack(side=tkinter.LEFT)
root.mainloop()
17、绝对布局
import tkinter
root = tkinter.Tk()
root.title("绝对布局")
root.geometry("300x300+150+150")
label_1 = tkinter.Label(root, text="good", bg="blue")
label_2 = tkinter.Label(root, text="nice", bg="red")
label_3 = tkinter.Label(root, text="cool", bg="brown")
label_1.place(x=10, y=10)
label_2.place(x=50, y=50)
label_3.place(x=200, y=200)
root.mainloop()
18、绝对布局
import tkinter
root = tkinter.Tk()
root.title("绝对布局")
root.geometry("300x300+150+150")
label_1 = tkinter.Label(root, text="good", bg="blue")
label_2 = tkinter.Label(root, text="nice", bg="red")
label_3 = tkinter.Label(root, text="cool", bg="brown")
label_1.place(x=10, y=10)
label_2.place(x=50, y=50)
label_3.place(x=200, y=200)
root.mainloop()
19、相对布局
import tkinter
root = tkinter.Tk()
root.title("绝对布局")
root.geometry("300x300+150+150")
label_1 = tkinter.Label(root, text="good", bg="blue")
label_2 = tkinter.Label(root, text="nice", bg="red")
label_3 = tkinter.Label(root, text="cool", bg="brown")
label_1.pack(fill=tkinter.Y, side=tkinter.LEFT)
label_2.pack(fill=tkinter.X, side=tkinter.TOP)
label_3.pack(fill=tkinter.X, side=tkinter.RIGHT)
root.mainloop()
20、表格布局
import tkinter
root = tkinter.Tk()
root.title("绝对布局")
root.geometry("300x300+150+150")
label_1 = tkinter.Label(root, text="good", bg="blue")
label_2 = tkinter.Label(root, text="nice", bg="red")
label_3 = tkinter.Label(root, text="cool", bg="brown")
label_4 = tkinter.Label(root, text="awsome", bg="yellow")
label_1.grid(row=0, column=0)
label_2.grid(row=0, column=1)
label_3.grid(row=1, column=0)
label_4.grid(row=1, column=1)
root.mainloop()
21、鼠标点击
import tkinter
root = tkinter.Tk()
root.title("绝对布局")
root.geometry("300x300+150+150")
button_1 = tkinter.Button(root, text="leftmouse button")
button_2 = tkinter.Button(root, text="leftmouse button")
label_1 = tkinter.Label(root, text="好男人就是我,我就是狗小剩")
label_2 = tkinter.Label(root, text="好男人就是我,我就是狗小剩2")
def func(event):
print(event.x, event.y)
button_1.bind("<Double-Button-1>", func)
button_1.pack()
button_2.bind("<Enter>", func)
button_2.bind("<Leave>", func)
button_2.pack()
label_1.bind("<B1-Motion>", func)
label_1.pack()
label_2.bind("<ButtonRelease-1>", func)
label_2.pack()
root.mainloop()
22、响应按键
import tkinter
root = tkinter.Tk()
root.title("绝对布局")
root.geometry("300x300+150+150")
def func(event):
print("event.char=", event.char)
print("event.keycode=", event.keycode)
#root.bind("<a>", func)
root.bind("<Key>", func)
root.mainloop()
23、radiobutton控件
import tkinter
root = tkinter.Tk()
"""
v=IntVar()
r = Radiobutton(root, text='刘诗诗', variable=v, value=1).pack(anchor=W)
r = Radiobutton(root, text='袁泉', variable=v, value=2).pack(anchor=W)
r = Radiobutton(root, text='韩雪', variable=v, value=3).pack(anchor=W)
"""
Girls=['刘诗诗','袁泉','韩雪']
v = tkinter.IntVar()
i = 1
for girl in Girls:
r = tkinter.Radiobutton(root, text=girl, variable=v, value=i)
#必须要又value值才能
r.pack(anchor=tkinter.W)
root.mainloop()
#checkbutoon 多选,radiobutton单选
———tk作业:树状图列出文件———
1.infoWindows
import tkinter
import os
from tkinter import ttk
class InfoWindows(tkinter.Frame):
def __init__(self, master):
frame = tkinter.Frame(master)
frame.grid(row=0, column=1)
self.ev = tkinter.Variable()
self.entry = tkinter.Entry(frame, textvariable=self.ev)
self.entry.pack()
self.txt = tkinter.Text(frame)
self.txt.pack()
2、treeFile
import tkinter
import os
from infoWindows import InfoWindows
from treeWindows import TreeWindows
import tkinter.messagebox
root = tkinter.Tk()
root.title("树状图")
#root.geometry("400x400+150+150")
path = r"D:\study\python\base_run"
infoWin = InfoWindows(root)
treeWin = TreeWindows(root, path, infoWin)
root.mainloop()
3、treeWindows
import tkinter
import os
from tkinter import ttk
import tkinter.messagebox
class TreeWindows(tkinter.Frame):
def __init__(self, master, path, otherWin):
frame = tkinter.Frame(master)
frame.grid(row=0, column=0)
self.tree = ttk.Treeview(frame)
self.tree.pack(side=tkinter.LEFT, fill=tkinter.Y)
tempPath = self.getListPath(path)
root_tree = self.tree.insert("", "end", text=tempPath, open=True, values=(path))
self.loadTree(root_tree, path)
self.sy = tkinter.Scrollbar(frame)
self.sy.pack(side=tkinter.RIGHT, fill=tkinter.Y)
self.sy.config(command=self.tree.yview)
self.tree.config(yscrollcommand=self.sy.set)
self.tree.bind("<<TreeviewSelect>>", self.func)
self.otherWin = otherWin
def func(self, event):
self.otherWin.txt.delete(1.0, tkinter.END)
self.v = event.widget.selection()
for sv in self.v:
file = self.tree.item(sv)["text"]
self.otherWin.ev.set(file)
aPath =self.tree.item(sv)["values"][0]
print(aPath)
try:
with open(aPath) as f:
for each_line in f:
self.otherWin.txt.insert(tkinter.INSERT, each_line)
f.close()
except OSError as reason:
tkinter.messagebox.showinfo('提示',"%s文件无法打开"% aPath)
print('这是一个文件夹' + str(reason))
def loadTree(self, parent, parentPath):
for fileName in os.listdir(parentPath):
self.absPath = os.path.join(parentPath, fileName)
treey = self.tree.insert(parent, "end", text=self.getListPath(self.absPath), values=(self.getAbsPath(self.absPath)))
if os.path.isdir(self.absPath):
self.loadTree(treey, self.absPath)
def getListPath(self, path):
self.pathList = os.path.split(path)
return self.pathList[-1]
def getAbsPath(self,path):
absFile = ""
allPath = path.split("\\")
numb = len(allPath)-1
for i in range(numb):
absFile =absFile+allPath[i]+'\\\\'
absFile = absFile+self.pathList[-1]
return absFile