在新行中打印tkinter标签

时间:2019-10-14 18:31:31

标签: python tkinter label

首先,对不起这个模糊的标题。我正在制作一个显示时间,获取天气和新闻的python应用程序。现在,当我通过tkinter标签打印新闻时,它将新闻标题打印在单独的一行上但在中心。如果我尝试指定.pack(side = LEFT)几何形状,它将移至左侧,但所有标题均以字符串而不是换行符的形式显示。我试图通过'\ n'添加新行,甚至用回车符'\ n'都无效。请帮我解决这个问题。附加下面的代码。

P.s我无法获得与For循环一起使用的消息,因此我手动打印了阵列。

from tkinter import *
import datetime
from PIL import Image, ImageTk
import requests



class Clock(Frame):
    def __init__(self, parent):
        Frame.__init__(self,parent, bg='black')
        self.now = datetime.datetime.today()
        self.time = str(self.now.hour) + ":" + str(self.now.minute)
        self.timelb = Label(self, text=self.time, font=("Helvetica 50"), bg='black', fg='white')
        self.timelb.pack(anchor=NE,padx=60,pady=0)
        self.date = str(self.now.day) + '.' + str(self.now.month) + '.' + str(self.now.year)
        self.day = self.now.strftime('%A')
        self.daylb = Label(self, text=self.day, font="Helvetica 20", bg='black', fg='white')
        self.daylb.pack(anchor=NE,padx=60)
        self.datelb = Label(self, text=self.date, font="Helvetica 25", bg = 'black', fg='white')
        self.datelb.pack(anchor=NE, padx=60)



class Weather(Frame):
    def __init__(self, parent):
        Frame.__init__(self,parent,bg='black')
        url = 'http://api.openweathermap.org/data/2.5/weather?appid=c73d9cdb31fd6a386bee66158b116cd0&q=Karachi&units=metric'
        json = requests.get(url).json()
        temperature = json['main']['temp']
        description = json['weather'][0]['description']
        icon_id = json['weather'][0]['icon']
        city = 'Karachi'
        icon_url = ('http://openweathermap.org/img/wn/{icon}@2x.png'.format(icon=icon_id))
        self.im = Image.open(requests.get(icon_url, stream=True).raw)
        self.ph = ImageTk.PhotoImage(self.im)
        degree = u'\N{DEGREE SIGN}' + 'C'
        self.pic_label = Label(self,image=self.ph,bg='black')
        self.pic_label.pack()
        self.lab= Label(self,text=(str(temperature) + degree),font=("Helvetica 40"), bg='black', fg='white')
        self.lab.pack()
        self.description_label=Label(self, text=description, font='Helvetica 20',bg='black', fg='white')
        self.description_label.pack()
        self.city_label=Label(self, text=city, font = 'Helvetica 10', bg='black', fg='white')
        self.city_label.pack()

class News(Frame):
    def __init__(self, parent):
        super(News, self).__init__(bg='black')  
        url = " https://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=caa7f97ce8f2400a9785cbe704afc345"
        json = requests.get(url).json()
        self.title = 'Headlines'
        self.title_lb = Label(self, text=self.title, font='Helvetica 25',bg='black', fg='white')
        self.title_lb.pack(side=TOP, anchor=N)
        im = Image.open('Newspaper_reduced.png')
        self.pho = ImageTk.PhotoImage(im)
        news1 = json['articles'][0]['title'] 
        news2 = json['articles'][1]['title'] 
        news3 = json['articles'][2]['title']  
        news4 = json['articles'][3]['title']  
        news5 = json['articles'][4]['title']
        self.img = Label(self,image=self.pho,bg='black')
        self.img.pack(side=LEFT)
        self.headline1_lb = Label(self, text=news1, font = 'Helvetica 15' ,bg='black', fg='white')
        self.headline1_lb.pack(side=LEFT)
        self.img2 = Label(self,image=self.pho,bg='black')
        self.img2.pack(side=LEFT)
        self.headline2_lb = Label(self, text = news2, font='Helvetica 15',bg='black', fg='white')
        self.headline2_lb.pack(side=LEFT)
        self.img3 = Label(self,image=self.pho,bg='black')
        self.img3.pack(side=LEFT)
        self.headlines3_lb = Label(self, text=news3, font='Helvetica 15',bg='black', fg='white')
        self.headlines3_lb.pack(side=LEFT)
        self.img4 = Label(self,image=self.pho,bg='black')
        self.img4.pack(side=LEFT)
        self.headlines4_lb = Label(self, text=news4, font='Helvetica 15',bg='black', fg='white')
        self.headlines4_lb.pack(side=LEFT)
        self.img5 = Label(self,image=self.pho,bg='black')
        self.img5.pack(side=LEFT)
        self.headlines5_lb = Label(self, text=news5, font='Helvetica 15',bg='black', fg='white')
        self.headlines5_lb.pack(side=LEFT)




class Fullscreen:
    def __init__(self):
        self.tk = Tk()
        self.tk.configure(bg='black')
        self.tk.title('smartmirror')
        self.topFrame = Frame(self.tk , bg='black')
        self.topFrame.pack(side=TOP, fill=BOTH, expand=YES)
        self.bottomFrame = Frame(self.tk, bg='black')
        self.bottomFrame.pack(side=BOTTOM, fill=BOTH, expand=YES)
        self.clock = Clock(self.topFrame)
        self.clock.pack(side=RIGHT, anchor=NE, padx=50, pady=60)
        self.weather = Weather(self.topFrame)
        self.weather.pack(side=LEFT, anchor=NW, padx=50, pady=70)
        self.news = News(self.bottomFrame)
        self.news.pack(side=BOTTOM, anchor=S)

if __name__ == '__main__':
    w = Fullscreen()
    w.tk.mainloop

1 个答案:

答案 0 :(得分:1)

首先:我删除了代码中的图片,因为我没有这些图片,我想浪费时间搜索可用作替换的图片。


如果您为标签设置了不同的颜色,那么您会看到宽度有所不同-它们使用的是文本宽度。

enter image description here

如果您使用

self.headline1_lb.pack(fill='x') 

然后它们将使用相同的宽度,但文本仍居中。

enter image description here

如果您使用

Label(..., anchor='w')

然后它将文本移到左侧。

enter image description here

如果要在标签文本中插入多行,则可能还需要

Label(..., anchor='w', justify='left')

如果要使用整个窗口宽度的文本,则必须使用fill='x'

self.news.pack(side=BOTTOM, anchor='s', fill='x')

enter image description here

之后,您可以再次设置black背景。