在Windows中显示tkinter对话框更新时出现问题

时间:2011-05-20 21:24:19

标签: python tkinter

我有一个更大的应用程序调用了许多可能需要很长时间的进程。所以我想我会发布一个子对话框,表明已经完成了多少步骤。在主模块中,我有:

  sdroot  = Toplevel()
  sdroot.geometry('+240+200')
  self.sd = StatusDialog( sdroot, "Completed %d Mutation(s)" )
  sdroot.focus_set()
  sdroot.lift()
  sdroot.wait_visibility()
  sdroot.grab_set()
  self.matrix.mutate( self.myzmm, self.mycomplex.pdb, self.sd  )
  sdroot.destroy()

应该显示我的状态对话框。 mutate函数然后用代码 -

更新该对话框
def mutate( self, z, pdbfile, sd = '' ):
     ...
     cnt += 1
     if sd:
        sd.update( cnt  )

状态对话框的代码是:

class StatusDialog:
      def __init__( self, master, fmtstr ):
         self.parent = master
         self.parent.title( "Calculation Status" )
         self.state  = StringVar()
         self.fmtstr = fmtstr
         self.sstr   = self.fmtstr % 0
         self.state.set( self.sstr )

         self.frame = Frame(self.parent, relief=RIDGE, borderwidth=2 )
         self.frame.pack()

         self.label=Label(  self.frame,  textvariable = self.state )
         self.label.pack( padx = 20, pady = 25 )

      def update( self, cnt  ):
         self.sstr  = self.fmtstr % cnt
         self.state.set( self.sstr )
         self.parent.update_idletasks()

它与python 2.4和RHEL 5完美配合。但是,在Windows XP(python 2.6)上,对话框发布了,但我只看到一个空白框。没有状态信息。

有人可以帮帮我吗?我不确定我是否做了一些根本错误的事情,Linux让我逃脱它或者我需要做一些特别的事情才能让对话框在Windows XP中显示。

0 个答案:

没有答案