Skip to content

Commit c3f53e8

Browse files
committed
使得favicon能在InfoGui里显示为128x128
1 parent a137241 commit c3f53e8

3 files changed

Lines changed: 25 additions & 18 deletions

File tree

Gui/InfoGui.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from tkinter.messagebox import showinfo
44

55
from ttkbootstrap.tooltip import ToolTip
6+
from io import BytesIO
67

78
from Gui.Widgets import *
89
from Libs.Vars import user_settings_loader
@@ -42,12 +43,17 @@ def __init__(self, master: Misc, data: ServerInfo):
4243
self.pack_widgets()
4344

4445
def load_data(self, data: ServerInfo):
45-
favicon = self.data.favicon_photo if data.has_favicon \
46-
else ImageTk.PhotoImage(file=r"assets\server_icon.png")
47-
self.favicon.configure(image=favicon)
46+
if data.has_favicon:
47+
self.favicon.image_io = BytesIO(data.favicon_data)
48+
else:
49+
with open(r"assets\server_icon.png", "rb") as f:
50+
self.favicon.image_io = BytesIO(f.read())
51+
self.favicon.image = Image.open(self.favicon.image_io, formats=["PNG"])
52+
self.favicon.image = self.favicon.image.resize((128, 128))
53+
self.favicon.favicon = ImageTk.PhotoImage(self.favicon.image)
54+
self.favicon.configure(image=self.favicon.favicon)
4855
# 将 favicon 引用传递给 self.favicon.image, 使其变成 self.favicon 的属性, 防止其被 gc 回收
49-
self.favicon.image = favicon
50-
self.load_icon(favicon)
56+
self.load_icon(self.favicon.favicon)
5157

5258
self.data = data
5359
self.MOTD.load_motd(self.data)
@@ -69,7 +75,7 @@ def load_icon(self, favicon: PhotoImage):
6975
7076
@param favicon: 一个 PIL.ImageTK.PhotoImage 实例化对象
7177
"""
72-
self.iconphoto(False, favicon)
78+
self.iconphoto(True, favicon)
7379

7480
def pack_widgets(self):
7581
self.favicon.pack_configure()

Gui/UserInterface.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from Gui.ScanBarGui import ScanBar
66
from Gui.ServerListGui import ServerList
77
from Gui.SettingsFrame import SettingsFrame
8-
from Libs.Vars import main_thread_over
98
from Gui.Widgets import *
109
from Libs.Vars import *
1110

@@ -71,7 +70,8 @@ def config_root_window(self): # 设置窗体
7170

7271
def set_icon(self):
7372
if exists("assets/icon.ico"):
74-
self.wm_iconbitmap("assets/icon.ico")
73+
self._icon.icon = ImageTk.PhotoImage(file="assets/icon.ico")
74+
self.iconphoto(True, self._icon.icon)
7575
else:
7676
print("图标文件丢失", file=stderr)
7777

Network/Scanner.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@
55
from queue import Queue, Empty
66
from threading import Thread, Lock
77
from time import sleep
8-
from typing import List, Any, Dict, Literal, Union
8+
from typing import List, Any, Dict, Literal, Union, Tuple
99

1010
from PIL import Image, ImageTk
11+
from PIL.ImageTk import PhotoImage
1112

1213
from Libs import Vars
1314

1415
ServerPinger: Any = None
1516
Address: Any = None
1617
TCPSocketConnection: Any = None
18+
_MaxUnknown = str
1719

1820

1921
def import_mcstatus():
@@ -221,6 +223,7 @@ def __init__(self, info: dict) -> None:
221223
self.player_max, self.player_online, self.players = self.parse_player_info()
222224

223225
# 服务器图标信息
226+
self.favicon = None
224227
self.favicon_data, self.favicon_photo, self.has_favicon = self.parse_icon_info()
225228

226229
# 服务器标题
@@ -261,15 +264,15 @@ def __call__(self) -> dict:
261264
def __str__(self) -> str:
262265
return self.text
263266

264-
def load_favicon_photo(self, has_favicon: bool = True, favicon_data=None, load_from_self=True) -> Union[
265-
ImageTk.PhotoImage, None]:
267+
def load_favicon_photo(self, has_favicon: bool = True, favicon_data=None, load_from_self=True) ->\
268+
Union[ImageTk.PhotoImage, None]:
266269
if not load_from_self:
267270
if has_favicon:
268-
favicon = Image.open(BytesIO(favicon_data), formats=["PNG"])
269-
return ImageTk.PhotoImage(favicon)
271+
self.favicon = Image.open(BytesIO(favicon_data), formats=["PNG"])
272+
return ImageTk.PhotoImage(self.favicon)
270273
elif self.has_favicon:
271-
favicon = Image.open(BytesIO(self.favicon_data), formats=["PNG"])
272-
self.favicon_photo = ImageTk.PhotoImage(favicon)
274+
self.favicon = Image.open(BytesIO(self.favicon_data), formats=["PNG"])
275+
self.favicon_photo = ImageTk.PhotoImage(self.favicon)
273276
return None
274277

275278
def parse_version_info(self):
@@ -291,9 +294,7 @@ def parse_version_info(self):
291294
return version_name, protocol_version, protocol_info, protocol_name, protocol_major_name, version_type
292295

293296
def parse_player_info(self):
294-
# 如果你的 IDE 提示我的类型注释不对, 那就是 IDE 的问题
295-
# 类型注释是正确的, 一层套一层导致 IDE 爆炸了 ( 其实是因为 self.parsed_data 没有做也很难做类型注释 )
296-
player_max: Union[int, Literal["未知"]] = self.parsed_data.get("players", {"max": "未知"})["max"]
297+
player_max: Union[int, _MaxUnknown] = self.parsed_data.get("players", {"max": "未知"})["max"]
297298
player_number = self.parsed_data.get("players", {"online": "未知"})["online"]
298299
if self.parsed_data.get("players", {}).get("sample"):
299300
player_list: List = self.parsed_data["players"]["sample"]

0 commit comments

Comments
 (0)