为了账号安全,请及时绑定邮箱和手机立即绑定

如何运行多个在 GUI 中依次显示信息的函数?

如何运行多个在 GUI 中依次显示信息的函数?

慕姐8265434 2021-08-05 17:57:59
我对 Python 还很陌生,并且已经开始构建一个显示新闻信息的 GUI。我创建了五个函数,当它们被调用时,会在窗口中显示相关信息。下面是函数本身的一个片段:# first function which creates new labels and fills them with the relevant site pic,# first article title, and description.def fn1():    label_maker(infoFrame, 0, 0, 630, 389, image=newImage1,                background='red')    label_maker(infoFrame, 630, 0, 655, 389, text=entry1.title,                background='blue', font=("", 20), wraplength=600)    label_maker(infoFrame, 0, 389, 1286, 389, text=entry1.description,                wraplength=1250, font=("", 16),                background='green')# second function to create labels and fill them with relevant infodef fn2():    label_maker(infoFrame, 0, 0, 630, 389, image=newImage2,                background='red')    label_maker(infoFrame, 630, 0, 655, 389, text=entry2.title,                background='blue', font=("", 20), wraplength=600)    label_maker(infoFrame, 0, 389, 1286, 389, text=entry2.description,                wraplength=1250, font=("", 16),                background='green')# thirddef fn3():    label_maker(infoFrame, 0, 0, 630, 389, image=newImage3,                background='red')    label_maker(infoFrame, 630, 0, 655, 389, text=entry3.title,                background='blue', font=("", 20), wraplength=600)    label_maker(infoFrame, 0, 389, 1286, 389, text=entry3.description,                wraplength=1250, font=("", 16),                background='green')# fourthdef fn4():    label_maker(infoFrame, 0, 0, 630, 389, image=newImage4,                background='red')    label_maker(infoFrame, 630, 0, 655, 389, text=entry4.title,                background='blue', font=("", 20), wraplength=600)    label_maker(infoFrame, 0, 389, 1286, 389, text=entry4.description,                wraplength=1250, font=("", 16),                background='green')我想以某种方式循环运行这些函数中的每一个,其中一个函数运行约 15 秒,然后运行下一个,然后运行下一个,依此类推,直到窗口关闭。我已经尝试过使用该after()方法,但它以我使用它的方式运行,直到最后一个函数被调用,函数才显示任何内容。我怎样才能一个接一个地循环这些并实际让它们显示相关信息?
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

我不是 100% 确定您entry1和其他条目的值来自什么。所以我只是建立了一些字典来暂时使用。


我认为您面临的问题之一是将小部件堆叠在最后一组的顶部,这样您就可以轻松构建一次然后更新它们。


我已经重新编写了您的代码,使其成为某种功能,并且对您的 label_maker 进行了一些更改。请注意,您的place()陈述在这里造成了很大的视觉问题。


place()不会影响框架的大小,因此当您仅place()用于框架中的小部件时,框架将始终为零大小。它只是行不通。您需要以某种方式控制帧的大小。


话虽如此,我只是通过更新标签来简化问题。


如果您有任何问题,请告诉我。


我最后使用了 3 种不同颜色的方块,所以我至少可以让你的代码工作。只需切换不同的图像路径即可。


下面的代码将在最后关闭之前每 15 秒更改一次标签。


import tkinter as tk



def manage_time():

    global tracker

    if tracker == 1:

        lbl1.config(image=newImage2)

        lbl2.config(text=entry2['title'])

        lbl3.config(text=entry2['description'])

        tracker = 2

        root.after(15000, manage_time)

    elif tracker == 2:

        lbl1.config(image=newImage3)

        lbl2.config(text=entry3['title'])

        lbl3.config(text=entry3['description'])

        tracker = 3

        root.after(15000, manage_time)

    else:

        root.destroy()


def label_maker(master, x, y, w, h, *args, **kwargs):

    label = tk.Label(master, *args, **kwargs)

    label.pack(fill="both", expand=1)

    return label


root = tk.Tk()

tracker = 1

infoFrame = tk.Frame(root, width=500, height=500)

infoFrame.pack()

""" All the code for your images and entry fields"""

entry1 = {"title":"entry1", "description":"description for entry 1"}

entry2 = {"title":"entry2", "description":"description for entry 2"}

entry3 = {"title":"entry3", "description":"description for entry 3"}


newImage1 = tk.PhotoImage(file="./RGB/blue.gif")

newImage2 = tk.PhotoImage(file="./RGB/red.gif")

newImage3 = tk.PhotoImage(file="./RGB/green.gif")


lbl1 = label_maker(infoFrame, 0, 0, 630, 389, image=newImage1, background='red')

lbl2 = label_maker(infoFrame, 630, 0, 655, 389, text=entry1['title'], background='blue',)

lbl3 = label_maker(infoFrame, 0, 389, 1286, 389, text=entry1['description'], background='green')


root.after(15000, manage_time)

root.mainloop()


查看完整回答
反对 回复 2021-08-05
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号