tkinter写个子窗口

import tkinter as tk


class MyToplevel(tk.Toplevel):
    intance = None
    def __new__(cls, *args, **kwargs):
        if not cls.intance:
            cls.intance = super().__new__(cls)
            return cls.intance
    def __init__(self,master=None):
        if hasattr(self,'initialized'):
            return
        self.initialized = True
        super(MyToplevel, self).__init__(master)
        self.geometry('400x400+300+100')
        self.configure(bg='cyan')
        self.protocol("WM_DELETE_WINDOW",self.on_close)

        #create widgets
        self.create_widgets()

    def on_close(self):
        self.destroy()
        MyToplevel.intance=None

    def create_widgets(self):
        self.btn = tk.Button(self,text='btn',bg='green',bd=2)
        self.btn.pack(side='left',padx=10,anchor='nw')

        self.btn2=tk.Button(self,text='stop',bg='yellow',bd=1)
        self.btn2.pack(side='left',padx=50,anchor='nw')



if __name__=='__main__':
    root=tk.Tk()
    root.geometry("500x300")
    def fun():
        if not MyToplevel.intance:
            MyToplevel()
        else:
            #将窗口最小化还原
            MyToplevel.intance.deiconify()


    tk.Button(root,text='ui',command=fun).pack(anchor='center')




    root.mainloop()



自定义界面

import json
import tkinter as tk


class CustoumeFrame(tk.Frame):
    '''提供绘图空间,所有图像在该容器完成'''
    def __init__(self,master):
        super(CustoumeFrame, self).__init__(master)
        self.pack(fill=tk.BOTH,expand='yes')
        self.canvas=tk.Canvas(self,bg='gray')
        self.canvas.pack(fill=tk.BOTH,expand='yes')


        self.drae_circle()
        self.move_image()



    def drae_circle(self):
        self.a=self.canvas.create_oval(10,10,100,120,fill='blue',outline='green')

        self.b=self.canvas.create_rectangle(40,40,120,120,fill='green',outline='red')

        self.c=self.canvas.create_oval(60,60,200,200,fill='pink')

    def clear(self):
        if self.a is None:
            return
        self.canvas.delete(self.a)

    def move_image(self):
        for i in [self.a,self.b,self.c]:
            self.canvas.move(i,10,0)
        self.canvas.after(1000,self.move_image)




自定义表格

import  tkinter as tk
from tkinter import ttk

class CustomTreeView(ttk.Treeview):
    def __init__(self,master,colums,*args,**kwargs):
        super(CustomTreeView, self).__init__(master,*args,**kwargs)
        self["columns"] = colums
        self.column("#0",width=0,stretch=tk.NO) #隐藏第一列

        #创建右键菜单
        self.popup_menu = tk.Menu(self,tearoff=0)
        self.popup_menu.add_command(label='删除选中的行',command=self.__delete_selected_row)

        #绑定右键菜单事件
        self.bind("<Button-3>",self.__show_pop_menu)


        #设置属性和列名
        for column in colums:
            self.column(column,width=100,anchor=tk.CENTER)
            self.heading(column,text=column)

    def __show_pop_menu(self,event):
        #获取鼠标点击的行
        item=self.identify_row(event.y)
        if item:
            self.selection_set(item)
        self.popup_menu.post(event.x_root,event.y_root)

    def __delete_selected_row(self):
        selected_items=self.selection()
        for item in selected_items:
            self.delete(item)


    def insert_row(self,values):
        self.insert("",tk.END,values=values)

    def delete_row(self,item):
        self.delete(item)


if __name__=="__main__":
    root=tk.Tk()
    root.geometry("900x800")

    cloumns=["ID","姓名","性别","年龄","地址","xuexio"]
    tables=CustomTreeView(root,colums=cloumns)

    #插入数据
    tables.insert_row(("1","张xx","男","38","郑州",'dddd'))
    tables.insert_row(("2","张轩萱","女","8","郑州",'aaaa'))
    tables.insert_row(("7","徐xx","女","35","郑州",'bbbbb'))

    tables.pack()





    root.mainloop()

绘制图像

import tkinter as tk
import time
class MyApp(tk.Tk):
    def __init__(self):
        super(MyApp, self).__init__()
        self.geometry('600x500')
        self.title='tkinter学习'
        self['bg']='gray'

        self.counter=tk.IntVar()
        self.counter.set(0)

        label=tk.Label(self,textvariable=self.counter,font=("楷书",30))
        label.pack(side='left',fill='both',expand='yes',padx=5,pady=5)

        btn=tk.Button(self,text='click')
        btn.pack(side='right',fill='y',anchor='center',pady=5,padx=5)
        btn.bind('<Button-1>',self.on_button)

    def on_button(self,event):

        self.counter.set(self.counter.get()+1)
        # time.sleep(1)
        self.after(1000,lambda :self.on_button(event))
        # self.update()

def move_group(canvas:tk.Canvas,group:list,dx,dy):
    for item in group:
        canvas.move(item,dx,dy)


def draw_hourse(canvas:tk.Canvas):

    points=[(50,250),(350,50),(650,250)]
    item1=canvas.create_polygon(points,fill='gray',outline='black',width=10)
    item2=canvas.create_rectangle((200,250,500,550),fill='white',outline='black',width=10)
    item3=canvas.create_oval((250,300,450,500),fill='yellow',outline='black',width=10)
    #把图元放入列表
    items=[item1,item2,item3]
    return items



if __name__=='__main__':
    root=tk.Tk()
    root.geometry("800x700")
    canvas=tk.Canvas(root,width=700,height=600,bg='cyan')
    canvas.pack()
    group=draw_hourse(canvas)
    move_group(canvas,group,-100,-100)





    root.mainloop()

绘制图形

import tkinter as tk

def rotate_taiji(canvas:tk.Canvas,angle):
    #清空画布
    canvas.delete("all")
    x=canvas.winfo_width()//2
    y=canvas.winfo_height()//2

    #绘制半圆
    canvas.create_arc(x-100,y-100,x+100,y+100,start=90+angle,fill='black',outline='black')
    canvas.create_arc(x-100,y-100,x+100,y+100,start=270+angle,extent=180,fill='white',outline='white')

    #绘制小圆
    canvas.create_oval(x-30,y-30,x+30,y+30,fill='black',outline='black')
    canvas.create_oval(x-30,y-130,x+30,y-70,fill='white',outline='white')

    #更新角度并下一次旋转
    angle+=10
    canvas.after(10,rotate_taiji,canvas,angle)


root=tk.Tk()
root.geometry("800x700+400+50")

canvas=tk.Canvas(root,width=400,height=400)
canvas.pack()

canvas2=tk.Canvas(root,width=300,height=300,bg='cyan')
canvas2.pack(side=tk.BOTTOM,anchor='w')
rotate_taiji(canvas2,90)


rotate_taiji(canvas,0)


动态图像


import tkinter as tk

def update_rectangle(value):
    value = int(value)  # 将滑动条的值转换为整数
    canvas.coords(rectangle, 0, 200-value, 100, 200)
    canvas.itemconfig(rectangle, fill="blue")

if __name__ == "__main__":
    root = tk.Tk()

    # 创建Canvas组件
    canvas = tk.Canvas(root, width=110, height=210)
    canvas.pack()

    # 绘制矩形
    rectangle = canvas.create_rectangle(5, 5, 105, 205, fill="blue")
    rec=canvas.create_rectangle(3,3,110,210,outline='red')

    # 创建滑动条
    scale = tk.Scale(root, from_=0, to=200, orient=tk.HORIZONTAL, command=update_rectangle)
    scale.pack()

    root.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值