【问题标题】:while loop in Python to update in windowPython中的while循环以在窗口中更新
【发布时间】:2014-07-24 12:18:48
【问题描述】:

我创建了一个脚本,它旨在将一个变量插入到插入字段中。 到目前为止,我已经能够创建打印变量的while 循环,所以我知道它的工作原理。

令人沮丧的部分是它没有弹出窗口,它只打印变量:

import time
import subprocess
from Tkinter import *
import urllib2
from ttk import *
import Tkinter as tk

root = Tk()

a= 0
while a<1:

    print a


    class Application(Frame):
            """GUI to display results of 'equity get'"""

            def __init__(self, master):
                """initialise the Frame"""
                Frame.__init__(self,master)
                self.grid()
                self.create_widgets()

            def create_widgets(self):
                """Create button, text and entry Widget"""
                """what it is i.e. label"""


                self.data = Label(self, text ="Data")
                self.data1 = Entry(self, width = 10)


                self.data.grid(column = 1, row = 1)
                self.data1.grid(column = 2, row = 1)
                self.data1.grid(column = 3, row = 1)            
                self.data1.insert(0,a)

app = Application(root)
root.title("reload test")
root.geometry("700x300")
root.mainloop()

下面的版本会打开窗口,但循环只迭代一次,而实际上,我希望它继续一整天。

import time
import subprocess
from Tkinter import *
import urllib2
from ttk import *
import Tkinter as tk

root = Tk()

a= 0
while a<1:

    print a


    class Application(Frame):
            """GUI to display results of 'equity get'"""

            def __init__(self, master):
                """initialise the Frame"""
                Frame.__init__(self,master)
                self.grid()
                self.create_widgets()

            def create_widgets(self):
                """Create button, text and entry Widget"""
                """what it is i.e. label"""


                self.data = Label(self, text ="Data")
                self.data1 = Entry(self, width = 10)


                self.data.grid(column = 1, row = 1)
                self.data1.grid(column = 2, row = 1)
                self.data1.grid(column = 3, row = 1)            
                self.data1.insert(0,a)

    app = Application(root)
    root.title("reload test")
    root.geometry("700x200")
    root.mainloop()

感谢@guest 提到使用afterfunction,但是,我有点不确定它需要去哪里。

@Wooble 变量 a 将是一个网络爬虫,我希望它将实时信息插入我的插入字段因此,它将运行一个循环并插入它找到的内容!

也许我将after 函数放在了不正确的位置!

import time
import subprocess
from Tkinter import *
import urllib2
from ttk import *
import Tkinter as tk

root = Tk()

a= 0
while a<1:
    url = "https://uk.finance.yahoo.com/q?s=ngq14.nym&ql=1"
    request= urllib2.Request(url)
    handle = urllib2.urlopen(request)
    content = handle.read()
    splitted_page24 = content.split("<span id=\"yfs_l10_ngq14.nym\">", 1);
    splitted_page24 = splitted_page24[1].split("</span>", 1)
    print splitted_page24[0]


    class Application(Frame):
            """GUI to display results of 'equity get'"""

            def __init__(self, master):
                """initialise the Frame"""
                Frame.__init__(self,master)
                self.grid()
                self.create_widgets()

            def create_widgets(self):
                """Create button, text and entry Widget"""
                """what it is i.e. label"""


                self.data = Label(self, text ="Data")
                self.data1 = Entry(self, width = 10)


                self.data.grid(column = 1, row = 1)
                self.data1.grid(column = 2, row = 1)
                self.data1.grid(column = 3, row = 1)            
                self.data1.insert(0,splitted_page24[0])

    app = Application(root)
    root.title("reload test")
    root.geometry("700x300")
    root.mainloop()
    root.after(15)                    

【问题讨论】:

  • 当主循环退出时,它将再次启动您的应用程序。您几乎肯定不想定义一个类并在无限循环中运行 GUI 主循环。你到底想在这里完成什么?
  • 这是 root.mainloop() 的原因,它本身就是一个循环。如果你想在这个循环中做一些更新,你可以使用after 和一个处理更新的函数,见这篇文章:stackoverflow.com/questions/2400262/…

标签: python tkinter


【解决方案1】:

也许您的代码中最大的问题是您在另一个循环中调用mainloop。这没有任何意义。 Tkinter 旨在让您只调用一次mainloop,通常作为程序中的最后一个可执行行,或主函数中的最后一个可执行行。

在循环中定义一个类也没有意义。恐怕这段代码需要彻底重构。

最后,您永远看不到窗口内容的原因是您没有要求让它们可见。您正在创建Application 的实例,它是Frame 的子类。但是,您忽略了在该实例上调用 packplacegrid,因此它保持不可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2014-11-02
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多