如何每隔n秒运行一个函数,但又不中断其他代码?也许在后台运行? - python

Python是我的第一语言,因此如果没有意义,请理解我。我正在用python制作虚拟宠物。我将Tkinter用于GUI。我想每5秒在Action类中运行一次display方法。但是,如果我使用线程,时间表或时间并将代码放在按钮的正前方,它就会冻结并只运行显示方法。如何在不中断按钮和其他部件的情况下每5秒运行一次显示方法?

class Pet:    
def __init__(self, name, hunger=0, boredom=0, tiredness=0, sickness=False,
             age=0, waste=0):
    self.__name = name
    self.hunger = hunger
    self.boredom = boredom
    self.tiredness = tiredness
    self.sickness = sickness
    self.age = age
    self.waste = waste
    self.choice = choice

class Action(Pet):
    def __init__(self, name):
        Pet.__init__(self, name, hunger=0, boredom=0, tiredness=0,
                 sickness=False, age=0, waste=0)
        self.name = name

    def display(self):
        print("------------")
        print("hunger", self.hunger)
        print("boredom", self.boredom)
        print("tiredness", self.tiredness)
        print("sickness", self.sickness)
        print("age", self.age)
class Window(Frame):
    def openmenu(self):
        petname = self.petnameEntry.get()
        user_pet = Action(petname)
        print("I am your pet,", petname)
        window = tk.Toplevel(root)
        w = Label(window, text="What would you like to do?")
        w.pack()

        btFeed = Button(window, text="Feed", command=lambda: user_pet.eat())
        btFeed.pack(pady=3)
        btPlay = Button(window, text="Play", command=lambda: 
        user_pet.play())
        btPlay.pack(pady=3)

python参考方案

您可以使用After方法。

import tkinter as tk
root = tk.Tk()

class Pet:
    def __init__(self, name, hunger=0, boredom=0, tiredness=0, sickness=False,
                 age=0, waste=0):
        self.__name = name
        self.hunger = hunger
        self.boredom = boredom
        self.tiredness = tiredness
        self.sickness = sickness
        self.age = age
        self.waste = waste

class Action(Pet):
    def __init__(self, name):
        Pet.__init__(self, name, hunger=0, boredom=0, tiredness=0,
                 sickness=False, age=0, waste=0)
        self.name = name

    def display(self):
        print("------------")
        print("hunger", self.hunger)
        print("boredom", self.boredom)
        print("tiredness", self.tiredness)
        print("sickness", self.sickness)
        print("age", self.age)
        root.after(5000,self.display)

root.after(5000,Action(Pet).display)

root.mainloop()

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

查找字符串中的行数 - python

我正在创建一个python电影播放器​​/制作器,我想在多行字符串中找到行数。我想知道是否有任何内置函数或可以编写代码的函数来做到这一点:x = """ line1 line2 """ getLines(x) python大神给出的解决方案 如果换行符是'\n',则nlines …

字符串文字中的正斜杠表现异常 - python

为什么S1和S2在撇号位置方面表现不同?S1="1/282/03/10" S2="4/107/03/10" R1="".join({"N\'" ,S1,"\'" }) R2="".join({"N\'…

如何在PyQt4的动态复选框列表中检查stateChanged - python

所以我要从PyQt4的列表中添加复选框。但是我找不到在Window类中对每个状态使用stateChanged的方法。这是从列表元素添加它们的功能: def addCheckbox(self): colunas = Graphic(self.caminho).getColunas() for col in colunas: c = QtGui.QCheckBo…