如何从一个窗口(类)到另一个窗口获取progressbar start()信息?

如何从一个窗口(类)到另一个窗口获取progressbar start()信息?,第1张

如何从一个窗口(类)到另一个窗口获取progressbar start()信息?

以下是您的代码的有效版本。我不得不解决许多问题,因为从我的回答到有关进度条的其他问题,您没有更改代码中的许多内容。

此处主要问题的答案基本上是,您必须传递实例,并在涉及的各种类实例中需要时记住该实例,以便他们的方法

self
在需要时可以通过参数使用它。同样,您试图派生和覆盖
tkSimpleDialog.Dialog
基类方法的方法也过于复杂且不正确。

通常是最好的(最简单的)事情做的仅仅是提供自己

validate()
apply()
因为这是它是如何设计的工作方法。如果您还需要自己的
__init__()
构造函数,则仅将参数传递给子类的基础方法即可,这一点很重要。如果需要更多功能,通常可以通过其他仅派生类的方法来提供,只有它或您也创建的其他类才知道。

无论如何,这就是我最终得到的结果:

import Tkinter, ttk, tkFileDialog, tkSimpleDialog, time, threadingclass App:    def __init__(self, master):        self.progress_line(master)    def progress_line(self, master):        # the value of "maximum" determines how fast progressbar moves        self._progressbar = ttk.Progressbar(master, mode='indeterminate', maximum=4) # speed of progressbar        self._progressbar.place(anchor='ne', height="20", width="150",x="175", y="30")    @property    def progressbar(self):        return self._progressbar # return value of private memberclass AppMenu(object):  def __init__(self, master, progressbar):      self.master = master      self.menu_bar()      self.progressbar = progressbar  def menu_bar(self):      self.menu_bar = Tkinter.Menu(self.master)      self.master.config(menu=self.menu_bar)      self.create_menu = Tkinter.Menu(self.menu_bar, tearoff=False)      self.create_menu.add_command(label="do", command=self.do)      self.menu_bar.add_cascade(label="now", menu=self.create_menu)  def do(self):      Dialog(self.master, self.progressbar) # display the dialog boxclass Dialog(tkSimpleDialog.Dialog):    def __init__(self, parent, progressbar):        self.progressbar = progressbar        tkSimpleDialog.Dialog.__init__(self, parent, title="Do foo?")    def apply(self):        self.start_foo_thread()    # added dialog methods...    def start_foo_thread(self):        self.foo_thread = threading.Thread(target=self.foo)        self.foo_thread.daemon = True        self.progressbar.start()        self.foo_thread.start()        master.after(20, self.check_foo_thread)    def check_foo_thread(self):        if self.foo_thread.is_alive(): master.after(20, self.check_foo_thread)        else: self.progressbar.stop()    def foo(self): # some time-consuming function...        time.sleep(3)master = Tkinter.Tk()master.title("Foo runner")app = App(master)appmenu = AppMenu(master, app.progressbar)master.mainloop()

希望这可以帮助。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5648893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存