tkinter模块高级操作(一) 您所在的位置:网站首页 文本怎么设置透明 tkinter模块高级操作(一)

tkinter模块高级操作(一)

2023-09-01 00:04| 来源: 网络整理| 查看: 265

【写在前面】

—— 众所周知,tkinter模块中自带的Button类是无法做到使其透明的(至少我无法做到)

【tip:透明是指让背景颜色或图片穿过按钮而显示出来】

—— 找遍了Button类的所有参数和操作,都无法解决这个问题!

—— 但!真的就没有办法做出一个透明的按钮吗?

—— 如果你认为只借助tkinter模块无法做到的话,请看下面的展示图!

震惊!这里面的按钮居然透明了!!!

这是我做的一个小游戏,完全用tkinter模块做成,没有用其他的模块!!!

链接放在这:Tkinter模块GUI图形化编程实战(八)——中国象棋(含超详解及完整源码、完整程序免费下载链接)_小康2022的博客-CSDN博客

—— 事实证明,用tkinter模块是可以做出透明的按钮的!

—— 还有透明的文本框!(原理是一样的)

快看呐!是透明的文本框诶!!!

这个是我做的另外一个未完成的作品,暂无链接哈

—— 不知大家是否已经想到博主是用什么方法做到的呢?

【tip:看文章标题其实你就知道方法了】

【正片开始】 【原理解说】

在tkinter模块里面只用内置的Button类确实改变不了它不透明这个事实,而且它是已经封装好了的类,就算你去继承它,重新创建一个属于自己的类,也不容易改变这个事实(因为原理不同),对于按钮(Button类)而言,它的外框和里面的部分是一个整体,无法分割,更不用说要让它里面的部分与外界的图片产生什么联系了。除非……

—— 有的人认为,不就是做个透明的按钮吗?这谁不会,我在背景上放一张图片,然后再裁剪该图片使其到正确的位置,最后在Button类上插入该裁剪了的图片不就是“透明”的啦?

—— 博主:不会吧不会吧,不会真的有人这样做吧?(震惊中......)

—— 博主:那我现在要一亿个这样的按钮嘞?你是不是要裁剪一亿次嘞???

实际上,上述也算是让按钮透明的一种方法,只不过这种透明是“假透明”,并不是真正的透明。

—— 又有人认为,我管它是不是真透明!能用不就好了?

—— 博主:先不说你这是否浪费内存,下面的操作“假透明”能实现吗?

真 · 透明按钮

看到这里,了解过tkinter模块的应该已经知道了原理。

这个透明是真的,但按钮是假的!

按钮是我们自己在Canvas控件上“画”出来的,再利用bind函数来对其关联一些事件,于是就得到了一个类似于按钮的“虚假按钮”。

它相对于“假透明”的按钮而言,优点在于按钮的样式我们可以自己设计,而“假透明”的按钮无法做到,因为它实际上是继承于Button类的,无法再对其重新修改,缺点呢,后面也会非常明显的看到,就是这个按钮样式的设置非常地让人烦恼,因为坐标位置的处理很麻烦(T_T)

不多说了,下面就上代码吧!

【代码演示】

【目标要求】做出一个矩形的“真透明”按钮,适当加一点样式

【功能实现】点击可以print出“Hello Python!”

这里我先把背景图给出来(如下)

背景图片(来源于互联网)

 来!上代码!!!

from tkinter import *# 引入模块 root = Tk()# 创建Tk控件 root.geometry('960x480+200+100')# 设置窗口大小及位置 root.title('透明按钮')# 设置窗口标题 canvas = Canvas(root,highlightthickness=0)# 创建Canvas控件,并设置边框厚度为0 canvas.place(width=960,height=480)# 设置Canvas控件大小及位置 bg = PhotoImage(file='background.png')# 【这里记得要改成对应的路径】 canvas.create_image(480,240,image=bg)# 添加背景图片 r1 = canvas.create_rectangle(380,350,580,400,width=2,outline='black')# 按钮外框 r2 = canvas.create_rectangle(380+3,350+3,580-3,400-3,width=2,outline='black')# 按钮内框 t = canvas.create_text(480,375,text='点 我',font=('楷体',20,'bold'),fill='black')# 按钮显示文本 canvas.bind('',lambda event:bind_1(event))# 关联鼠标点击事件 canvas.bind('',lambda event:bind_2(event))# 关联鼠标经过事件 def bind_1(event):# 点击响应函数 if 380


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有