Tkinterfile

案例1.辞职小软件

import tkinter as tk
from tkinter import messagebox
from random import random


root=tk.Tk()
root.geometry('500x300+100+100')
root.title('fef')

frame1=tk.Frame(root)
frame1.pack()


tk.Label(frame1,text='尊敬的各位领导',font=24,padx=30,pady=30).pack(side=tk.LEFT,anchor=tk.N)

img=tk.PhotoImage(file='t.png')
label_img=tk.Label(frame1,image=img,padx=30,pady=30,bd=0)
label_img.pack(side=tk.LEFT,anchor=tk.N)

tk.Label(frame1,text='辞职人:正心',height=25,font=20,padx=30,pady=30,anchor=tk.S).pack(side=tk.LEFT)

yes_img=img
no_img=img

yes_btn=tk.Button(frame1,text='yes',bd=0)
no_btn=tk.Button(frame1,text='no',bd=0)

yes_btn.place(relx=0.3,rely=0.8,anchor=tk.CENTER)
no_btn.place(relx=0.7,rely=0.8,anchor=tk.CENTER)

frame2=tk.Frame(root)
# frame2.pack()
tk.Label(frame2,text='ffsdfcdcaf',font=('黑体',18),
         justify=tk.LEFT,
         height=300,
         fg='red',
         padx=50).pack()

tk.Button(frame2,text='exit',command=root.quit).place(relx=0.9,rely=0.8)



def on_exit():
    messagebox.showwarning(title='ff',message='此路不通')

root.protocol('WM_DELETE_WINDOW',on_exit)

def move(event):
    no_btn.place(relx=random(),rely=random(),anchor=tk.CENTER)

no_btn.bind('<Enter>',move)

def sure():
    frame1.pack_forget()
    frame2.pack()

yes_btn.config(command=sure)

root.mainloop()

案例2.记事本布局

#记事本布局

import tkinter as tk


root=tk.Tk()
root.title('记事本')
root.geometry('800x500+100+100')

menu=tk.Menu(root,tearoff=False)

file_menu=tk.Menu(menu,tearoff=False)
file_menu.add_command(label='新建')
file_menu.add_command(label='打开')
file_menu.add_command(label='保存')
file_menu.add_command(label='另存为')
menu.add_cascade(label='文件',menu=file_menu)

edit_menu=tk.Menu(menu,tearoff=False)
edit_menu.add_command(label='撤销')
edit_menu.add_command(label='重做')
edit_menu.add_command(label='复制')
edit_menu.add_command(label='粘贴')
edit_menu.add_command(label='剪切')
menu.add_cascade(label='编辑',menu=edit_menu)

about_menu=tk.Menu(menu,tearoff=False)
about_menu.add_command(label='作者')
about_menu.add_command(label='版权')
menu.add_cascade(label='关于',menu=about_menu)

status_str_var=tk.StringVar() #StringVar是Tk库内部定义的字符串变量类型,在这里用于管理部件上面的字符;
status_str_var.set("字符数{}".format(0))
status_label=tk.Label(root,textvariable=status_str_var,bd=1,relief=tk.SUNKEN,anchor=tk.W)
status_label.pack(side=tk.BOTTOM,fill=tk.X)

var_line=tk.StringVar()
line_label=tk.Label(root,textvariable=var_line,width=1,bg='#faebd7',anchor=tk.N,font=18)
line_label.pack(side=tk.LEFT,fill=tk.Y)

text_pad=tk.Text(root,font=18)
text_pad.pack()
text_pad.pack(fill=tk.BOTH,expand=True)


#滚动栏
scroll=tk.Scrollbar(text_pad)
text_pad.config(yscrollcommand=scroll.set)#绑定
scroll.config(command=text_pad.yview) #当拖动滚动栏时页面会变化
scroll.pack(side=tk.RIGHT,fil=tk.Y)

root.config(menu=menu)
root.mainloop()

案例3:计算器

import tkinter as tk

root=tk.Tk()
root.title('计算器')
root.geometry('295x280+150+150')
font=('宋体',20)
font_16=('宋体',16)

root.attributes('-alpha',0.9) #设置透明度
# root['background']='#ffffff'

result_num=tk.StringVar()
result_num.set('')

tk.Label(root,
         textvariable=result_num,font=font,height=2,
         width=20,justify=tk.LEFT,anchor=tk.SE
         ).grid(row=1,column=1,columnspan=4)



button_clear=tk.Button(root,text='C',width=5,font=font_16,relief=tk.FLAT,bg='#b1b2b2')
button_back=tk.Button(root,text='<-',width=5,font=font_16,relief=tk.FLAT,bg='#b1b2b2')
button_division=tk.Button(root,text='/',width=5,font=font_16,relief=tk.FLAT,bg='#b1b2b2')
button_multiplication=tk.Button(root,text='x',width=5,font=font_16,relief=tk.FLAT,bg='#b1b2b2')
#表格布局
button_clear.grid(row=2,column=1,padx=4,pady=2)
button_back.grid(row=2,column=2,padx=4,pady=2)
button_division.grid(row=2,column=3,padx=4,pady=2)
button_multiplication.grid(row=2,column=4,padx=4,pady=2)

button_seven=tk.Button(root,text='7',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_eight=tk.Button(root,text='8',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_nine=tk.Button(root,text='9',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_subtraction=tk.Button(root,text='-',width=5,font=font_16,relief=tk.FLAT,bg='#b1b2b2')
button_seven.grid(row=3,column=1,padx=4,pady=2)
button_eight.grid(row=3,column=2,padx=4,pady=2)
button_nine.grid(row=3,column=3,padx=4,pady=2)
button_subtraction.grid(row=3,column=4,padx=4,pady=2)

button_four=tk.Button(root,text='4',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_five=tk.Button(root,text='5',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_six=tk.Button(root,text='6',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_add=tk.Button(root,text='+',width=5,font=font_16,relief=tk.FLAT,bg='#b1b2b2')
button_four.grid(row=4,column=1,padx=4,pady=2)
button_five.grid(row=4,column=2,padx=4,pady=2)
button_six.grid(row=4,column=3,padx=4,pady=2)
button_add.grid(row=4,column=4,padx=4,pady=2)

button_one=tk.Button(root,text='1',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_two=tk.Button(root,text='2',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_three=tk.Button(root,text='3',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_equal=tk.Button(root,text='=',width=5,height=3,font=font_16,relief=tk.FLAT,bg='#b1b2b2')
button_one.grid(row=5,column=1,padx=4,pady=2)
button_two.grid(row=5,column=2,padx=4,pady=2)
button_three.grid(row=5,column=3,padx=4,pady=2)
button_equal.grid(row=5,column=4,padx=4,pady=2,rowspan=2)

button_zero=tk.Button(root,text='0',width=12,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_zero1=tk.Button(root,text='0',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_dot=tk.Button(root,text='.',width=5,font=font_16,relief=tk.FLAT,bg='#eacda1')
button_equal2=tk.Button(root,text='=',width=5,font=font_16,relief=tk.FLAT,bg='#b1b2b2')
button_zero.grid(row=6,column=1,padx=4,pady=2,columnspan=2)
# button_zero1.grid(row=6,column=2,padx=4,pady=2)
button_dot.grid(row=6,column=3,padx=4,pady=2)
# button_equal2.grid(row=6,column=4,padx=4,pady=2)

#点击事件
def click_button(x):
    print(x)
    result_num.set(result_num.get()+x)

def calculation():
    opt_str=result_num.get()
    result=eval(opt_str)
    result_num.set(result)
    print(opt_str)

button_one.config(command=lambda : click_button('1'))
button_two.config(command=lambda : click_button('2'))
button_three.config(command=lambda : click_button('3'))
button_four.config(command=lambda : click_button('4'))
button_five.config(command=lambda : click_button('5'))
button_six.config(command=lambda : click_button('6'))
button_seven.config(command=lambda : click_button('7'))
button_eight.config(command=lambda : click_button('8'))
button_nine.config(command=lambda : click_button('9'))
button_zero.config(command=lambda : click_button('0'))
button_add.config(command=lambda : click_button('+'))
button_division.config(command=lambda : click_button('/'))
button_subtraction.config(command=lambda : click_button('-'))
button_multiplication.config(command=lambda : click_button('x'))


button_equal.config(command=calculation)

root.mainloop()

案例4:图片查看器

#图片查看器

import tkinter as tk
import glob



root=tk.Tk()
root.geometry('900x600+100+100')
root.title('图片查看器')

#golb 通配符查找文件
photos=glob.glob('*.png')
print(photos)

current_photo_no=1
photo=tk.PhotoImage(file=photos[current_photo_no])


photo_label=tk.Label(root,image=photo,width=600,height=500)
photo_label.pack()

number_var=tk.StringVar()
number_var.set('1 of 4')
tk.Label(root,textvariable=number_var,bd=1,relief=tk.SUNKEN,anchor=tk.CENTER).pack(fill=tk.X)

button_frame=tk.Frame(root)

# root['background']='#ffffff'
button_frame.pack()
prev_photo=tk.Button(button_frame,text='上一页')
next_photo=tk.Button(button_frame,text='下一页')


prev_photo.pack(side=tk.LEFT,anchor=tk.CENTER)
next_photo.pack(side=tk.RIGHT,anchor=tk.CENTER)

#需要用PIL
def change_potos(next_on):
    global current_photo_no
    current_photo_no += next_on
    photo_label.configure(image=photo)
    print(current_photo_no)
    photo_label.pack()



prev_photo.config(command=lambda : change_potos(-1))
next_photo.config(command=lambda : change_potos(1))

root.mainloop()




案例5 网络调试小工具

在这里插入图片描述

import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.title('网络调试工具')
root.geometry('650x500+100+100')

"""
左边布局
"""
left_frame=tk.Frame(root)
left_frame.pack(side=tk.LEFT,anchor=tk.N,padx=5,pady=5)
"""左边布局 网络设置"""
net_frame=tk.LabelFrame(left_frame,text='网络设置',padx=5,pady=5)
net_frame.pack()

tk.Label(net_frame,text='1.协议类型').pack(anchor=tk.W)
socket_type=ttk.Combobox(net_frame)
socket_type['values']=['TCP服务器','TCP 客户端']
socket_type.current(0)
socket_type.pack(anchor=tk.W)

tk.Label(net_frame,text='2.本地主机地址').pack(anchor=tk.W)
socket_host=ttk.Combobox(net_frame)
socket_host['values']=['127.0.0.1','192.168.59.241']
socket_host.current(0)
socket_host.pack(anchor=tk.W)

tk.Label(net_frame,text='3.本地端口').pack(anchor=tk.W)
entry_port=ttk.Entry(net_frame)
entry_port.pack(fill=tk.X)

#按钮
button_frame=tk.Frame(net_frame)
button_frame.pack()

open_button=tk.Button(button_frame,text='打开')
close_button=tk.Button(button_frame,text='关闭')
open_button.pack(side=tk.LEFT)
close_button.pack(side=tk.RIGHT)


"""左边布局 接收设置"""
recv_frame=tk.LabelFrame(left_frame,text='接收设置',padx=5,pady=5)
recv_frame.pack(side=tk.TOP,anchor=tk.N,fill=tk.X)
tk.Radiobutton(recv_frame,text='UTF-8').pack(anchor=tk.W)
tk.Radiobutton(recv_frame,text='GBK').pack(anchor=tk.W)

tk.Checkbutton(recv_frame,text='解析为JSON').pack(anchor=tk.W)
tk.Checkbutton(recv_frame,text='自动换行').pack(anchor=tk.W)

"""左边布局 发送设置"""
recv_frame=tk.LabelFrame(left_frame,text='接收设置',padx=5,pady=5)
recv_frame.pack(side=tk.TOP,anchor=tk.N,fill=tk.X)
tk.Radiobutton(recv_frame,text='UTF-8').pack(anchor=tk.W)
tk.Radiobutton(recv_frame,text='GBK').pack(anchor=tk.W)

tk.Checkbutton(recv_frame,text='数据加密').pack(anchor=tk.W)
tk.Checkbutton(recv_frame,text='信息接受').pack(anchor=tk.W)


"""右边布局"""
right_frame=tk.Frame(root)
right_frame.pack(side=tk.TOP,padx=5,pady=5)

info_frame=tk.Frame(right_frame)
info_frame.pack()
tk.Label(info_frame,text='数据日志').pack(anchor=tk.W)

text_pad=tk.Text(info_frame,width=62)
text_pad.pack(side=tk.LEFT,fill=tk.X)

send_text_bar=tk.Scrollbar(info_frame)
send_text_bar.pack(side=tk.RIGHT,fill=tk.Y)

tk.Label(right_frame,text='信息发送').pack(anchor=tk.W)

send_frame=tk.Frame(right_frame)
send_frame.pack()

send_area=tk.Text(send_frame,width=58,height=6)
send_area.pack(side=tk.LEFT)
send_button=tk.Button(send_frame,text='发送',width=4)
send_button.pack(side=tk.RIGHT,fill=tk.Y)


root.mainloop()

案例7.选择文件,只显示指定格式

# 指定格式文件显示
import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.title("选择文件或文件夹,得到路径")

# 初始化Entry控件的textvariable属性值
select_path = tk.StringVar()

from xml.etree.ElementTree import parse





def select_file():
    # 单个文件选择
    selected_file_path = filedialog.askopenfilename(filetypes=[('XML','.xml'),('TXT','.txt'),('XLS','.xls')])  # 使用askopenfilename函数选择单个文件

    select_path.set(selected_file_path)
    
    f = open(selected_file_path)
    # 第1个参数为输入源,返回一个ElementTree对象
    et = parse(f)
    # 通过元素数(ElementTree)得到根节点
    root = et.getroot()
    print(root)


def select_files():
    # 多个文件选择
    selected_files_path = filedialog.askopenfilenames()  # askopenfilenames函数选择多个文件
    select_path.set('\n'.join(selected_files_path))  # 多个文件的路径用换行符隔开


def select_folder():
    # 文件夹选择
    selected_folder = filedialog.askdirectory()  # 使用askdirectory函数选择文件夹
    select_path.set(selected_folder)


# 布局控件
tk.Label(root, text="文件路径:").grid(column=0, row=0, rowspan=3)
tk.Entry(root, textvariable = select_path).grid(column=1, row=0, rowspan=3)
tk.Button(root, text="选择单个文件", command=select_file).grid(row=0, column=2)
tk.Button(root, text="选择多个文件", command=select_files).grid(row=1, column=2)
tk.Button(root, text="选择文件夹", command=select_folder).grid(row=2, column=2)

root.mainloop()




xml解析

import tkinter as tk


root=tk.Tk()
root.title('测试')
root.geometry('800x600+100+100')

select_frame=tk.Frame(root)
select_frame.pack()

# tk.Text(select_frame,width=10,height=1).pack(side=tk.LEFT)
# tk.Button(select_frame,text='选择',width=4).pack(side=tk.RIGHT,fill=tk.X)

send_area=tk.Text(select_frame,width=58,height=6)
send_area.pack(side=tk.LEFT)
send_button=tk.Button(select_frame,text='发送',width=4)
send_button.pack(side=tk.RIGHT,fill=tk.Y)

root.mainloop()




测试UI代码


```python
import tkinter as tk
from xml.etree.ElementTree import parse
from tkinter import filedialog
from tkinter import ttk


root=tk.Tk()
root.title('XML')
root.geometry('500x300+100+100')

# 初始化Entry控件的textvariable属性值
select_path = tk.StringVar()
text_data=tk.StringVar()


def select_file():
    # 单个文件选择
    selected_file_path = filedialog.askopenfilename(
        filetypes=[('XML', '.xml')])  # 使用askopenfilename函数选择单个文件

    select_path.set(selected_file_path)

    if selected_file_path=='':
        pass
    else:
        f = open(selected_file_path)
        # 第1个参数为输入源,返回一个ElementTree对象
        et = parse(f)
        # 通过元素数(ElementTree)得到根节点
        root = et.getroot()
        print(root)

        list = root.findall('.//command[@validTo]')
        validTo=list[0].attrib['validTo']

        text_pad.delete(0.0, tk.END)
        text_pad.insert(1.0, validTo)



#xml
def xml_tool(xml_list):

    for path in xml_list:
        print(path)
        filename=path.split('/')[-1]
        print(filename)
        f = open(path)
        et = parse(f)

        root = et.getroot()
        list = root.findall('.//command[@validTo]')
        print(list[0].attrib['validTo'])

def select_files():
    # 多个文件选择
    selected_files_path = filedialog.askopenfilenames(filetypes=[('XML', '.xml')])  # askopenfilenames函数选择多个文件
    select_path.set('\n'.join(selected_files_path))  # 多个文件的路径用换行符隔开
    print(selected_files_path)
    print(list(selected_files_path))

    text_pad.delete(0.0,tk.END)
    text_pad.insert(1.0,selected_files_path)
    xml_tool(list(selected_files_path))

#text insert data
def text_insert(data):

    pass


def select_folder():
    # 文件夹选择
    selected_folder = filedialog.askdirectory()  # 使用askdirectory函数选择文件夹
    select_path.set(selected_folder)

# 布局控件
label_frame=tk.Frame(root)
label_frame.pack(side=tk.TOP,anchor=tk.N,padx=5,pady=5,fill=tk.X)

tk.Label(label_frame, text="文件路径:").pack(side=tk.LEFT)
tk.Entry(label_frame, textvariable=select_path).pack(side=tk.LEFT,fill=tk.X)

ttk.Button(label_frame, text="选择单个文件", command=select_file).pack()
# tk.Text(label_frame).pack(side=tk.BOTTOM)


#button
button_frame=tk.Frame(root,bg='#faebd7')
button_frame.pack(side=tk.BOTTOM,anchor=tk.W,padx=5,pady=5,fill=tk.X)

button_ok=ttk.Button(button_frame,text='确认').pack(side=tk.RIGHT)
button_cencle=ttk.Button(button_frame,text='取消').pack(side=tk.RIGHT)

#text
text_pad=tk.Text(root,font=18)
text_pad.pack()
text_pad.pack(fill=tk.BOTH,expand=True)

root.mainloop()

请添加图片描述

面向对象写法

import tkinter as tk
from xml.etree.ElementTree import parse
from tkinter import filedialog
from tkinter import ttk


class xml_ui:
    def __init__(self):
        self.root=tk.Tk()
        self.root.title('XML')
        self.root.geometry('500x300+100+100')

        #初始化可变参数变量 textvariable
        self.select_path=tk.StringVar()
        self.text_data=tk.StringVar()

        #主界面的三个frame
        self.label_frame()
        self.button_frame()
        self.center_frame()

        self.root.mainloop()


    def label_frame(self):
        #页面布局
        label_frame=tk.Frame(self.root)
        label_frame.pack(side=tk.TOP,anchor=tk.N,padx=5,pady=5,fill=tk.X)
        tk.Label(label_frame, text="文件路径:").pack(side=tk.LEFT)
        tk.Entry(label_frame, textvariable=self.select_path).pack(side=tk.LEFT, fill=tk.X)

        ttk.Button(label_frame, text="选择单个文件").pack()


    def button_frame(self):
        #按键布局
        button_frame=tk.Frame(self.root,bg='#faebd7')
        button_frame.pack(side=tk.BOTTOM,anchor=tk.W,padx=5,pady=5,fill=tk.X)

        button_ok=ttk.Button(button_frame,text='确认').pack(side=tk.RIGHT)
        button_cencle=ttk.Button(button_frame,text='取消').pack(side=tk.RIGHT)

    def center_frame(self):
        center_frame=tk.Frame(self.root)
        center_frame.pack()
        center_frame.pack(fill=tk.BOTH,expand=True)

        self.center_frame_Left(center_frame)
        self.center_frame_Right(center_frame)

    def center_frame_Left(self,frame):
        left_frame_text=tk.Frame(frame,bg='#faebd7')
        left_frame_text.place(relx=0.05,rely=0.1,relheight=0.8,relwidth=0.4)

        text_pad = tk.Text(left_frame_text, font=18, bg="#faebd7",fg='black')
        text_pad.pack()
        text_pad.pack(fill=tk.BOTH, expand=True)

    def center_frame_Right(self,frame):
        right_frame_text=tk.Frame(frame,bg='#334353')
        right_frame_text.place(relx=0.55,rely=0.1,relheight=0.8,relwidth=0.4)

        text_pad = tk.Text(right_frame_text, font=18, bg="#334355",fg='red')
        text_pad.pack()
        text_pad.pack(fill=tk.BOTH, expand=True)




xml_ui=xml_ui()




封装2–按键切换页面

import tkinter as tk
from xml.etree.ElementTree import parse
from tkinter import filedialog
from tkinter import ttk


class xml_ui:
    def __init__(self):
        self.root=tk.Tk()
        self.root.title('XML')
        self.root.geometry('500x300+100+100')



        #初始化可变参数变量 textvariable
        self.select_path=tk.StringVar()
        self.text_data=tk.StringVar()

        #menu
        self.file_Menue(self.root)

        # #page1
        # self.page_1(self.root)



        self.root.mainloop()

    def file_Menue(self,root):
        menu_bar=tk.Menu(root,tearoff=False)

        #查找或修改xml属性内容
        file_menu=tk.Menu(menu_bar,tearoff=False,activebackground='blue',activeforeground='red',
                          activeborderwidth=10,
                          bg='green',
                          )
        font=('Courier',20,'bold')
        file_menu.add_command(label='查找',font=font,command=self.munu_method)
        file_menu.add_command(label='修改',command=self.munu_method1)
        menu_bar.add_cascade(label='文件',menu=file_menu)

        #根据条件生成新的xml文件
        edit_menu = tk.Menu(menu_bar, tearoff=False)
        edit_menu.add_command(label='生成')
        menu_bar.add_cascade(label='生成', menu=edit_menu)

        root.config(menu=menu_bar)

    def munu_method(self):
        # page1
        self.page_1(self.root)
        print('dddd')

    def munu_method1(self):
        # page1

        self.page_1(self.root)
        print('dfrfr')

    def page_1(self,root):
        # 主界面的三个frame
        self.label_frame(self.root)
        self.button_frame(self.root)
        self.center_frame(self.root)



    def label_frame(self,frame):
        #页面布局
        label_frame=tk.Frame(frame)
        label_frame.pack(side=tk.TOP,anchor=tk.N,padx=5,pady=5,fill=tk.X)
        tk.Label(label_frame, text="文件路径:").pack(side=tk.LEFT)
        tk.Entry(label_frame, textvariable=self.select_path).pack(side=tk.LEFT, fill=tk.X)

        ttk.Button(label_frame, text="选择单个文件").pack()


    def button_frame(self,frame):
        #按键布局
        button_frame=tk.Frame(frame,bg='#faebd7')
        button_frame.pack(side=tk.BOTTOM,anchor=tk.W,padx=5,pady=5,fill=tk.X)

        button_ok=ttk.Button(button_frame,text='确认').pack(side=tk.RIGHT)
        button_cencle=ttk.Button(button_frame,text='取消').pack(side=tk.RIGHT)

    def center_frame(self,frame):
        center_frame=tk.Frame(frame)
        center_frame.pack()
        center_frame.pack(fill=tk.BOTH,expand=True)

        self.center_frame_Left(center_frame)
        self.center_frame_Right(center_frame)

    def center_frame_Left(self,frame):
        left_frame_text=tk.Frame(frame,bg='#faebd7')
        left_frame_text.place(relx=0.05,rely=0.1,relheight=0.8,relwidth=0.4)

        text_pad = tk.Text(left_frame_text, font=18, bg="#faebd7",fg='black')
        text_pad.pack()
        text_pad.pack(fill=tk.BOTH, expand=True)

    def center_frame_Right(self,frame):
        right_frame_text=tk.Frame(frame,bg='#334353')
        right_frame_text.place(relx=0.55,rely=0.1,relheight=0.8,relwidth=0.4)

        text_pad = tk.Text(right_frame_text, font=18, bg="#334355",fg='red')
        text_pad.pack()
        text_pad.pack(fill=tk.BOTH, expand=True)




xml_ui=xml_ui()

https://zhidao.baidu.com/question/1761174296742452868.html

修正切换页面

import tkinter as tk
from xml.etree.ElementTree import parse
from tkinter import filedialog
from tkinter import ttk


class xml_ui:
    def __init__(self):
        self.root=tk.Tk()
        self.root.title('XML')
        self.root.geometry('500x300+100+100')



        #初始化可变参数变量 textvariable
        self.select_path=tk.StringVar()
        self.text_data=tk.StringVar()

        #menu
        self.file_Menue(self.root)

        # #page1
        # self.page_1(self.root)

        self.frame1=tk.Frame(self.root)
        self.page_1(self.frame1)

        self.frame2 = tk.Frame(self.root)
        self.page_2(self.frame2)


        self.currentpage=self.frame1
        self.currentpage.pack(fill=tk.BOTH,expand=True)


        self.root.mainloop()

    def file_Menue(self,root):
        menu_bar=tk.Menu(root,tearoff=False)

        #查找或修改xml属性内容
        file_menu=tk.Menu(menu_bar,tearoff=False,activebackground='blue',activeforeground='red',
                          activeborderwidth=10,
                          bg='green',
                          )
        font=('Courier',20,'bold')
        file_menu.add_command(label='查找',font=font,command=self.munu_method)
        file_menu.add_command(label='修改',command=self.munu_method1)
        menu_bar.add_cascade(label='文件',menu=file_menu)

        #根据条件生成新的xml文件
        edit_menu = tk.Menu(menu_bar, tearoff=False)
        edit_menu.add_command(label='生成')
        menu_bar.add_cascade(label='生成', menu=edit_menu)

        root.config(menu=menu_bar)

    def munu_method(self):
        # page1
        if self.currentpage != self.frame1:
            self.currentpage.pack_forget()  # 取消显示当前界面,并不是销毁
            self.currentpage = self.frame1
            self.currentpage.pack(fill=tk.BOTH,expand=True)  # 显示界面1

        print('dddd')

    def munu_method1(self):
        # page1
        if self.currentpage != self.frame2:
            self.currentpage.pack_forget()  # 取消显示当前界面,并不是销毁
            self.currentpage = self.frame2
            self.currentpage.pack(fill=tk.BOTH,expand=True)  # 显示界面2
        print('dfrfr')

    def page_1(self,root):
        # 主界面的三个frame
        self.label_frame(root)
        self.button_frame(root)
        self.center_frame(root)

    def page_2(self,root):
        # 主界面的三个frame
        self.label_frame(root)
        self.button_frame(root)
        self.center_frame(root)


    def label_frame(self,frame):
        #页面布局
        label_frame=tk.Frame(frame)
        label_frame.pack(side=tk.TOP,anchor=tk.N,padx=5,pady=5,fill=tk.X)
        tk.Label(label_frame, text="文件路径:").pack(side=tk.LEFT)
        tk.Entry(label_frame, textvariable=self.select_path).pack(side=tk.LEFT, fill=tk.X)

        ttk.Button(label_frame, text="选择单个文件").pack()


    def button_frame(self,frame):
        #按键布局
        button_frame=tk.Frame(frame,bg='#faebd7')
        button_frame.pack(side=tk.BOTTOM,anchor=tk.W,padx=5,pady=5,fill=tk.X)

        button_ok=ttk.Button(button_frame,text='确认').pack(side=tk.RIGHT)
        button_cencle=ttk.Button(button_frame,text='取消').pack(side=tk.RIGHT)

    def center_frame(self,frame):
        center_frame=tk.Frame(frame)
        center_frame.pack()
        center_frame.pack(fill=tk.BOTH,expand=True)

        self.center_frame_Left(center_frame)
        self.center_frame_Right(center_frame)

    def center_frame_Left(self,frame):
        left_frame_text=tk.Frame(frame,bg='#faebd7')
        left_frame_text.place(relx=0.05,rely=0.1,relheight=0.8,relwidth=0.4)

        text_pad = tk.Text(left_frame_text, font=18, bg="#faebd7",fg='black')
        text_pad.pack()
        text_pad.pack(fill=tk.BOTH, expand=True)

    def center_frame_Right(self,frame):
        right_frame_text=tk.Frame(frame,bg='#334353')
        right_frame_text.place(relx=0.55,rely=0.1,relheight=0.8,relwidth=0.4)

        text_pad = tk.Text(right_frame_text, font=18, bg="#334355",fg='red')
        text_pad.pack()
        text_pad.pack(fill=tk.BOTH, expand=True)




xml_ui=xml_ui()