吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 465|回复: 7
收起左侧

[已解决] Python创建不规则窗口,请各位大神帮助。

 关闭 [复制链接]
快乐的小驹 发表于 2024-1-24 19:02
本帖最后由 快乐的小驹 于 2024-1-25 16:22 编辑

出现的问题:窗口四周不透明,无法形成图片形状的异型窗口。

111.jpg
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk

def open_folder():
    folder_path = filedialog.askdirectory()
    folder_path_var.set(folder_path)

# 创建窗口
window = tk.Tk()
window.title("Open Folder")

# 打开并设置背景图像
background_image = Image.open("bg.png")
background_photo = ImageTk.PhotoImage(background_image)

# 创建画布并添加背景图像
canvas = tk.Canvas(window, width=background_image.width, height=background_image.height)
canvas.pack()
canvas.create_image(0, 0, anchor=tk.NW, image=background_photo)

# 创建文本框并将其放置在画布上
folder_path_var = tk.StringVar()
folder_path_entry = tk.Entry(window, textvariable=folder_path_var)
canvas.create_window(300, 200, window=folder_path_entry)

# 创建按钮并将其放置在画布上
open_button = tk.Button(window, text="Open", command=open_folder)
canvas.create_window(300, 350, window=open_button)

# 运行主循环
window.mainloop()


背景图片及代码:https://veong.lanpv.com/ibgzq1m6iqfe

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

~零度 发表于 2024-1-25 10:04
本帖最后由 ~零度 于 2024-1-25 10:20 编辑
快乐的小驹 发表于 2024-1-25 09:12
边缘能不能虚化?最主要的是输入框都透明了~

tkinter不支持这个功能,只能设置某种颜色为透明色来近似你说的效果,输入框透明是因为输入框背景色为白色,前面又指定了白色为透明色,你可以指定别的颜色为透明色避免这个问题

把下面两个地方的white改成 #F0000F (或者其他你觉得不需要的颜色作为透明色)

[Python] 纯文本查看 复制代码
window.wm_attributes('-transparentcolor', 'white')
canvas = tk.Canvas(window, width=background_image.width, height=background_image.height, bg="white", highlightthickness=0)


然后图片里面不要出现 #F0000F 这种像素,其他组件上也不应该出现这种颜色的像素点

可以再PS里面将图片上可能出现的#F0000F像素替换为其他颜色
1.jpg
首先选择需要替换的颜色
2.jpg
然后选择目标颜色,略微改动,比如从#F0000F改为 #F00010,视觉效果是一样的
3.jpg
最后修改后的图形界面的效果(帮你重新抠图了,原图边缘有点问题):
image.png

附处理好的背景图片(拿去直接用的):
https://www.123pan.com/s/XCvbVv-OBwl.html

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
快乐的小驹 + 1 + 1 我很赞同!

查看全部评分

sai609 发表于 2024-1-24 19:12
 楼主| 快乐的小驹 发表于 2024-1-24 19:19
Takitooru 发表于 2024-1-24 20:26
.overrideredirect(True) # 让窗体无标题栏
.wm_attributes("-transparentcolor", "#FFFFFF") #设置窗体白色透明
参考:
用tkinter做一个不规则的任意形状的异形窗体
https://www.wb98.com/post/329.html
zxcvbnm10230 发表于 2024-1-24 21:09
https://wwvn.lanzoul.com/iiTXO1m6vnze

能力有限,效果不是很好,不过可以尝试重新抠图,可以消除白色边缘
批注 2024-01-24 210435.png
~零度 发表于 2024-1-24 22:02
下面的代码测试是可以的,主要是通过window.wm_attributes('-transparentcolor', 'white')将主窗口的白色设置为透明色,然后再指定Canvas的背景色为白色且边框为0就可以实现背景透明了,但是背景图片里面不能有白色,不然也会透明(可以稍微调节一下RGB,比如改成254,254,254实现接近白色的效果)

通过设置window.overrideredirect(True)去除窗口标题及边框

[Java] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk


def open_folder():
    folder_path = filedialog.askdirectory()
    folder_path_var.set(folder_path)


# 创建窗口
window = tk.Tk()
window.title("Open Folder")
window.overrideredirect(True)
window.wm_attributes('-transparentcolor', 'white')

# 打开并设置背景图像
background_image = Image.open("bg.PNG")
background_photo = ImageTk.PhotoImage(background_image)

# 创建画布并添加背景图像
canvas = tk.Canvas(window, width=background_image.width, height=background_image.height, bg="white", highlightthickness=0)
canvas.pack()
canvas.create_image(0, 0, anchor=tk.NW, image=background_photo)

# 创建文本框并将其放置在画布上
folder_path_var = tk.StringVar()
folder_path_entry = tk.Entry(window, textvariable=folder_path_var)
canvas.create_window(300, 200, window=folder_path_entry)

# 创建按钮并将其放置在画布上
open_button = tk.Button(window, text="Open", command=open_folder)
canvas.create_window(300, 350, window=open_button)


# 计算窗口居中位置
window_width = window.winfo_reqwidth()
window_height = window.winfo_reqheight()
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()

x_coordinate = (screen_width // 2) - (window_width // 2)
y_coordinate = (screen_height // 2) - (window_height // 2)

# 设置窗口在屏幕上的位置(居中)
window.geometry(f'+{x_coordinate}+{y_coordinate}')

# 运行主循环
window.mainloop()


Snipaste_2024-01-24_22-01-00.jpg
 楼主| 快乐的小驹 发表于 2024-1-25 09:12
~零度 发表于 2024-1-24 22:02
下面的代码测试是可以的,主要是通过window.wm_attributes('-transparentcolor', 'white')将主窗口的白色设 ...

{43B154AA-275B-4994-B068-F1A2C58C99F8}.png
边缘能不能虚化?最主要的是输入框都透明了~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-6 04:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表