Python2:用图标图像替换字符串中的单词。

2024-09-28 03:12:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个天气应用程序。我有一段代码从DarkSkyAPI检索未来7天的天气信息。打印出来的字符串看起来像Sat clear-day 10。我要做的是显示文本“我是一个标签”,但是替换字符串中的clear-sky部分作为我的clear-sky图标。在

我要找的格式是Sat {icon} 10

from Tkinter import *
from datetime import timedelta, datetime
from PIL import Image, ImageTk
import requests
import json

## Location of Icons used
icon_lookup = {
    'clear-day'             : "Icons/WeatherIcons/WeatherIcon.png",

}

class Weather(Frame):
    def __init__(self, parent, *args, **kwargs):
        Frame.__init__(self, parent, bg = 'black')

        self.iconLbl = Label(self, bg="black")
        self.iconLbl.grid(row = 0, column = 1, sticky = W)

        self.icon = ''

        self.get_weather()

    def get_weather(self):
        try:
            ## Get Week's Weather Values
            todayPlusOne = 'Sat clear-day 10' 

            ## Get Icon
            icon_id = 'clear-day'
            icon2 = None
            if icon_id in icon_lookup:
                icon2 = icon_lookup[icon_id]

            if icon2 is not None:
                if self.icon != icon2:
                    self.icon = icon2
                    image = Image.open(icon2)
                    image = image.resize((100, 100), Image.ANTIALIAS)
                    image = image.convert('RGB')
                    photo = ImageTk.PhotoImage(image)

                    self.iconLbl.config(image=photo)
                    self.iconLbl.image = photo
            else:
                self.iconLbl.config(image='')


        except Exception as e:
            print "Error: %s. Cannot get weather." % e

        self.after(900000, self.get_weather)

class FullscreenWindow:
    def __init__(self):
        self.tk = Tk()
        self.tk.configure(background='black')
        self.topFrame = Frame(self.tk, background = 'black', height = 240)
        self.middleFrame = Frame(self.tk, background = 'black', height = 240)
        self.bottomFrame = Frame(self.tk, background = 'black', height = 240)
        self.topFrame.pack(side = TOP, fill = BOTH)
        self.middleFrame.pack(side = TOP, fill = BOTH)
        self.bottomFrame.pack(side = TOP, fill = BOTH)
        self.state = False
        self.tk.bind('<Return>', self.toggle_fullscreen)

        #weather
        self.weather = Weather(self.topFrame)
        self.weather.pack(side = LEFT, anchor = NW, padx = 25, pady = 25)

    def toggle_fullscreen(self, event=None):
        self.state = not self.state
        self.tk.attributes('-fullscreen', self.state)
        return 'break'      

if __name__ == '__main__':
    w = FullscreenWindow()
    w.tk.resizable(width=False, height=False)
    w.tk.geometry('720x480')
    w.tk.mainloop()

这有可能吗?在


Tags: imageimportselfgetifdefframetk
1条回答
网友
1楼 · 发布于 2024-09-28 03:12:10

不能将图像放在标签中文本的中间;只能将图像放在一侧(上、下、左、右)或居中。要同时包含文本和图像,您需要使用标签的compound属性。在

要使图像位于文本中间,至少有三个选项:

  1. 创建一个包含文本标签、图标标签和更多文本标签的框架
  2. 使用画布,并在画布上创建文本和图像项
  3. 使用支持嵌入式图像的单行文本小部件。在

相关问题 更多 >

    热门问题