【问题标题】:Tkinter python dilemmaTkinter python 困境
【发布时间】:2013-12-13 00:23:09
【问题描述】:

我正在尝试使用 tkinter 编写一个 python 程序,它会不断检查新的

电子邮件。我遇到的问题是,目前,电子邮件仅在用户更新时才更新

点击一个按钮,因为我不希望我的程序在用户输入正确之前运行

用户名和密码。

如果用户没有检查新电子邮件,我如何确保程序不会检查新电子邮件

输入正确的数据,但同时要不断检查是否有新电子邮件

用户已输入数据

以下是我的部分代码:

    def printer(self):  
    self.mail=StringVar()
    self.username=self.userinput.get()
    self.MailPass=self.password.get()
    self.unread = int(feedparser.parse("https://" + self.username + ":" + self.MailPass +"@mail.google.com/gmail/feed/atom")["feed"]["fullcount"])    #gmail command
    self.mail.set("Unread Emails:"+str(self.unread))
    self.mail_label=Label(self.frame,textvariable=self.mail)
    self.mail_label.grid(row=2,column=0,sticky=W)


    return 

def showGUI(self):
    now=datetime.datetime.now()
    dhtreader.init()
    s = dhtreader.read(11,18)
    if s == None:
       s=(1,1)

    self.temp.set("Temperature:"+str(s[0])+" C")
    self.humidity.set("Humidity:"+str((s[1]))+"%")




    current_time = str(now.hour)+':'+str(now.minute)+':'+str(now.second)
    current_date=(str(now.month)+':'+str(now.day)+':'+str(now.year))
    self.time1.set("Time:"+current_time)
    self.date.set("Date:"+current_date)

    self.frame.after(100,self.showGUI)


def main():

root=Tk()
app=GUI(master=root)
app.showGUI()   
root.title('Controller GUI')
root.mainloop()



if __name__=='__main__':
    main()

printer 是按下按钮时执行的方法。 showGUI 是所有更新发生的地方。

【问题讨论】:

    标签: python class oop tkinter


    【解决方案1】:

    我不是 100% 确定你在问什么,所以我会回答我能想到的所有可能性。

    在用户输入用户名和密码后,只需在printer 末尾调用self.frame.after(0, self.showGUI)self.showGUI()。然后它将每 100 毫秒开始检查一次,并且永不停止,这正是您想要的。

    如果您不希望它需要按下按钮,您可以触发printer 在焦点离开用户名或密码字段时运行,或者每次更改任何一个内容时等;那么您只需要检查用户名和密码是否有效,如果有效,则只调用showGUI

    如果您希望在程序运行之间存储用户名和密码,则需要编写执行此操作的代码。例如,您可以将它们存储在printer 中,并将它们(如果存在)加载到同一类的__init__ 中。我假设您已经知道如何读取和写入文件;如果没有,请参阅the tutorial

    【讨论】:

    • 在打印机结束时调用 self.frame.after(0, self.showGUI) 或 self.showGUI() 会冻结我的程序
    • @user3064033:这听起来像是一个不同的问题。如果showGUI 做任何缓慢或阻塞的事情(比如dhtreader.read(11, 18) 可能吗?),你不能在不冻结GUI 的情况下在主线程中执行它。无论你如何解决原来的问题,你最终都会遇到新的问题。如果这是您的问题,请参阅 Why your GUI app freezes 了解如何处理。
    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2015-09-26
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2017-10-08
    相关资源
    最近更新 更多