【问题标题】:Refreshing code in Tkinter window with button使用按钮刷新 Tkinter 窗口中的代码
【发布时间】:2013-11-06 23:43:05
【问题描述】:

我 99% 这是不可能的,因为 python 是第一个字节编译的,然后可能会打开 Tk 窗口,但我想知道是否有任何情况可以在保存后添加一个按钮来刷新你的 tk 应用程序实际编写的应用程序?

您可以想象在更新填充或一些次要属性之后,只需点击按钮刷新框架而不是关闭并启动一个新实例会非常酷。

某事...

class myapp()
 def __init___(self,root):
   self.root = root
   main_menu = ttk.Frame(self.root)
   ttk.Button(main_menu,text="Refresh",command=lambda root=self.root:refresh_me(root)))
 def refresh_me(self,root):
     #refresh the window I'm in somehow...
root = Tkinter.Tk()
myapp = myapp(root)
root.mainloop()

【问题讨论】:

  • refresh_me中尝试update_idletasks()
  • 不,我所在的整个文件不被视为空闲任务

标签: python events tkinter ttk


【解决方案1】:

哇,我想通了。我做了两个主线。一个用于导入,另一个用于刷新。

给你:

#name of file is python_script.py

class myapp()
 def __init___(self,root):
   self.root = root
   main_menu = ttk.Frame(self.root)
   ttk.Button(main_menu,text="REFRESH",command=lambda self=self:self._update())

 def _update(self):
   import python_script
   python_script.main_refresh(self.root,python_script)

def main_refresh(root,python_script):
   reload(python_script)
   root.destroy()
   python_script.main()

def main():
   root = Tkinter.Tk()
   myapp = myapp(root)
   root.mainloop()

if __name__ == '__main__':
   main() 

【讨论】:

  • 然后,每当您更改文件并保存它时,点击刷新按钮,它将加载一个新窗口并销毁另一个窗口
  • 您说“刷新框架而不是关闭并启动一个新实例”,但现在您正在销毁 Tk 实例,然后在其中创建一个新实例和新小部件,甚至启动一个新的 tcl口译员。
【解决方案2】:

这并不能完全回答问题,但确实提供了实现您既定目标的途径

第一个easy_install q

然后

class myapp()
 def __init___(self,root):
   self.root = root
   main_menu = ttk.Frame(self.root)
   ttk.Button(main_menu,text="Refresh",command=lambda root=self.root:refresh_me(root)))
 def shell_me(self,root):
     #refresh the window I'm in somehow...
     import q
     q.d()

此时会打开一个 shell,您可以执行类似的操作

>>> myapp.padding = "10px" #or whatever you are trying to modify
>>> exit()

然后您的应用将使用更新的参数恢复。

还有其他选项,例如 pycrust,它可以打开一个交互式 shell,它可能不会阻塞主循环,并且可能包含一些额外的功能......但在我的经验中,q.d() 是最容易折腾的一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 2020-04-02
    • 2010-12-29
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多