You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter设备租赁GUI程序添加图片及修改窗口颜色相关问题

Tkinter设备租赁程序配色与图片添加方案

一、二级窗口背景色设置方法

Toplevel类型的二级窗口和主窗口属性配置逻辑完全一致,直接操作Toplevel实例的bg属性即可,同时需要同步修改窗口内所有容器(比如Frame)和控件的背景色,避免出现色块断层:

  • 二级窗口实例设置:self.win['bg'] = '目标颜色'(支持颜色名、十六进制色值两种格式)
  • 内部Frame设置:self.frameFit = Frame(self.win, bg='和窗口一致的颜色')
  • 窗口内Label、Button等控件也同步添加bg参数配置即可实现整体配色统一

二、窗口添加图片方法

Tkinter显示图片需要依赖Label控件承载,重点注意需要把图片对象绑定为窗口/类的实例属性,避免Python垃圾回收机制销毁图片导致无法显示:

主窗口添加图片

你已经加载了logo图片,只需要新增一个Label控件承载图片,同时把图片对象绑定为root的属性即可:

# 原有加载图片代码修改为绑定到root属性
root.img = ImageTk.PhotoImage(Image.open("4 Dry Out Logo.png"))
# 新增Label放置图片
Label(root, image=root.img, bg='blue').pack()

二级窗口添加图片

在Menu类的__init__方法内加载图片,绑定为self的实例属性,再用Label承载即可:

# 二级窗口内加载图片,绑定为实例属性避免被回收
self.sub_img = ImageTk.PhotoImage(Image.open("二级窗口图片的本地路径.png"))
# 新增Label放置图片
Label(self.frameFit, image=self.sub_img, bg='二级窗口背景色').pack()

完整修改后可运行代码

from tkinter import *
from tkinter import ttk
from PIL import ImageTk, Image
import os 

# 主窗口属性配置
root = Tk()
root.title('4 Dry Out | 主菜单')
# 主窗口logo图片绑定为root属性避免被回收
root.logo_img = ImageTk.PhotoImage(Image.open("4 Dry Out Logo.png"))
root.geometry("350x220") # 调整尺寸适配图片显示
root['bg']='blue'

class Menu:
    def __init__(self):
        # 创建二级窗口
        self.win = Toplevel()
        # 设置二级窗口背景色,可按需替换为其他颜色
        self.win['bg'] = 'lightblue'
        self.win.geometry("400x450")
        # 二级窗口内的Frame同步设置背景色
        self.frameFit = Frame(self.win, bg='lightblue')
        self.frameFit.pack(pady=10)

        # 二级窗口添加自定义图片,替换为你的本地图片路径即可
        self.sub_img = ImageTk.PhotoImage(Image.open("二级窗口图片路径.png"))
        Label(self.frameFit, image=self.sub_img, bg='lightblue').pack(pady=5)

        # 标题Label同步设置背景色
        self.TitleLabel = Label(self.frameFit, text="设备租赁门户", bg='lightblue', font=("黑体",16)).pack(pady=5)

        # 设备类型下拉框
        self.Equipment = ["鼓风机/风扇", "除湿机", "空气净化器", "发电机", "抽吸/清洁设备"]
        self.equipCombo = ttk.Combobox(self.frameFit, value=self.Equipment)
        self.equipCombo.current(0)
        self.equipCombo.pack(pady=5)

        # 租赁天数输入
        self.dayLabel = Label(self.frameFit, text="租赁天数:", bg='lightblue').pack()
        self.dayTxt = Entry(self.frameFit, width=5)
        self.dayTxt.pack(pady=2)

        # 设备数量输入
        Label(self.frameFit, text="租赁数量:", bg='lightblue').pack()
        self.equipAmt = Entry(self.frameFit, width=5)
        self.equipAmt.pack(pady=2)

        # 计算按钮
        self.recordBtn = Button(self.frameFit, text="计算总费用", command=self.calcTotal, bg='navy', fg='white')
        self.recordBtn.pack(pady=10)

    def calcTotal(self):
        self.Equipment = self.equipCombo.get()
        self.dayAmount = float(self.dayTxt.get())
        self.EquipAmt = float(self.equipAmt.get())
        # 优化价格匹配逻辑,简化冗余判断
        price_map = {
            "鼓风机/风扇":25,
            "除湿机":50,
            "空气净化器":175,
            "发电机":200,
            "抽吸/清洁设备":75
        }
        total = price_map[self.Equipment] * self.dayAmount * self.EquipAmt
        # 结果Label同步设置背景色
        self.totalLbl = Label(self.frameFit, text=f"总应付金额:${round(total, 2)}", bg='lightblue', font=("黑体",14)).pack(pady=5)
            

class MainWindow:
    def __init__(self, master):
        mainFrame = Frame(master, bg='blue')
        mainFrame.pack()

        # 主窗口显示logo
        Label(master, image=master.logo_img, bg='blue').pack(pady=5)
        self.titleLabel = Label(master, text="4 Dry Out 设备租赁", bg = "blue", fg = "white", font =("微软雅黑", 20))
        self.titleLabel.pack(pady=5)
        self.Btn = Button(master, text="水损设备租赁", command=self.MenuWindow, bg = "navy", fg = "white").pack(pady=5)

    def MenuWindow(self):
        self.record = Menu()
        self.record.win.mainloop()

# 启动主窗口
winStart = MainWindow(root)
root.mainloop()

内容的提问来源于stack exchange,提问作者Lady

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:06:03