首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何运行几个在GUI中一个接一个地显示信息的函数?

如何运行几个在GUI中一个接一个地显示信息的函数?
EN

Stack Overflow用户
提问于 2018-11-02 16:08:37
回答 1查看 43关注 0票数 0

我对Python非常陌生,我已经开始构建一个显示新闻信息的GUI。我创建了五个函数,这些函数在调用时会在窗口中显示相关信息。下面是函数本身的片段:

代码语言:javascript
复制
# 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 info
def 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')


# third
def 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')


# fourth
def 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')


# fifth
def fn5():
    label_maker(infoFrame, 0, 0, 630, 389, image=newImage5,
                background='red')
    label_maker(infoFrame, 630, 0, 655, 389, text=entry5.title,
                background='blue', font=("", 20), wraplength=600)
    label_maker(infoFrame, 0, 389, 1286, 389, text=entry5.description,
                wraplength=1250, font=("", 16),
                background='green')

另外,下面是用于澄清的label_maker函数:

代码语言:javascript
复制
# define a new label maker function to construct labels within frames that 
will
#  be placed within infoFrame
def label_maker(master, x, y, w, h, *args, **kwargs):
    frame = Frame(master, width=w, height=h)
    frame.pack_propagate(0)
    frame.place(x=x, y=y)
    label = Label(frame, *args, **kwargs).pack(fill=BOTH, expand=1)
    return label

我想以一种旋转的方式运行这些函数,其中一个函数运行15秒,然后下一个函数运行,然后继续运行,直到窗口关闭。我尝试过使用after()方法,但是按照我使用它的方式,在调用最后一个函数之前,函数没有显示任何内容。我怎样才能一个接一个地循环这些信息,并让它们显示有关的信息呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-02 18:19:40

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

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

我已经对您的代码进行了修改,使其在我的端具有一定的功能,并且对您的label_maker进行了一些更改。请注意,您的place()语句在这里造成了很大的视觉问题。

place()不会影响框架的大小,所以当您只对框架中的小部件使用place()时,框架将始终为零大小。只是不起作用。你需要如何控制你的帧的大小。

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

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

我在我的末端使用了3种不同颜色的方块,这样我至少可以让你的代码工作。只需切换不同的图像路径。

下面的代码将在结束前15秒更改标签。

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53122159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档