【Tkinter】实现自定义窗口样式

本文展示了如何使用Tkinter库在Python中创建自定义窗口样式,包括效果展示、源码分享、方法解析和已知的迷之BUG。通过阅读,你可以了解到如何为Tkinter窗口添加特殊方法,并解决Text控件的焦点问题。

一、效果展示

记事本
效果演示2
效果演示3

二、源码

一、源码

  复制即可食用。

class tk:
    from tkinter import Tk, Frame, Button, Label, Toplevel
    from PIL.Image import open
    from PIL.ImageTk import PhotoImage

def WinBaseTk(icon=None, Toplevel=0, master=None, quitbuttonstate='n', move=1, relief='Flat-BlackFrame'):
    class window: #类
        pass

    def StartMove(event): #开始移动
        window.x = event.x
        window.y = event.y

    def StopMove(event): #停止移动
        window.x = None
        window.y = None

    def OnMotion(event): #位置
        deltax = event.x - window.x
        deltay = event.y - window.y
        x = root.winfo_x() + deltax
        y = root.winfo_y() + deltay
        root.geometry("+%s+%s" % (x, y))
    focusColor = {
   
   'in': {
   
   'fg': 'white', 'bg': '#153798'},
                  'out': {
   
   'fg': 'white', 'bg': '#7A7C79'}}

    def setFocusColor(key, value): #设置焦点颜色
        focusColor[key] = value
        return focusColor

    def windowColorTurn(do): #改变窗口颜色
        if do == 'in': #焦点在窗口时
            for i in tkList:
                try:
                    i.config(fg=focusColor['in']['fg'])
                except:
                    pass
                i.config(bg=focusColor['in']['bg'])
                
            titleButton_close.config(bg='red', activebackground='red')
            
            if titleButton_close['state'][0] == 'd':
                titleButton_close.config(bg='#640000')
        elif do == 'out': #焦点不在窗口时
            for i in tkList:
                try:
                    i.config(fg=focusColor['out']['fg'])
                except:
                    pass
                i.config(bg=focusColor['out']['bg'])

	#判断窗口创建为Toplevel还是Tk
    if bool(Toplevel) == False:
        root = tk.Tk()
    if bool(Toplevel) 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值