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

一、效果展示

记事本
效果演示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 
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
引用解释了为什么想要开发一个tkinter的绘制组件。由于tkinter的一些限制,某些组件的功能无法通过tkinter本身绘制出来,比如scrollbar。因此,开发自定义组件可以解决这个问题,并且还可以提高窗口的运行速度,简化界面布局,并使用更丰富的组件样式。 引用展示了一个简单的自定义组件类的创建过程。在这个例子中,自定义组件类是通过继承Canvas类来实现的。该类包含了与绘制组件相关的属性和方法,例如Frame、Scrollbar和Canvas等。 下面是一个简单示例的自定义组件的创建过程: ```python from tkinter import * class CustomComponent(Canvas): def __init__(self, master, **kw): self.frame = Frame(master) self.vbar = Scrollbar(self.frame) self.vbar.pack(side=RIGHT, fill=Y) # 其他组件属性和方法的设置 Canvas.__init__(self, self.frame, **kw) self.pack(fill=BOTH, expand=True) self.vbar['command'] = self.yview # 其他组件属性和方法的设置 # 复制Canvas类的几何方法 canvas_methods = vars(Canvas).keys() methods = vars(Pack).keys() | vars(Grid).keys() | vars(Place).keys() methods = methods.difference(canvas_methods) for m in methods: if m != '_' and m != 'config' and m != 'configure': setattr(self, m, getattr(self.frame, m)) ``` 在这个示例中,CustomComponent类继承了Canvas类,并添加了一些自定义的属性和方法。你可以根据自己的需求来扩展和修改这个类,以创建更适合你的自定义组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值