在pythontkin中使用顶层窗口的对话框

2024-09-28 01:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个叫做mainter的应用程序里写了一个对话。我的对话框初始值设定项通常如下所示:

class OKCANCEL( Toplevel ):
    def __init__( self, parent, title ):
        Toplevel.__init__( self, parent )
        self.parent = parent
        self.title( title )
...

我在我的应用程序中将其称为:

^{pr2}$

其中self.mainWindow是我的应用程序窗口中的一个框架(一个继承自Frame的类)。 现在,每次我调用对话框时,都会出现一个较小的窗口,然后目标窗口将替换小窗口。显示持续时间很短,但是,这是恼人的有这种安抚。 我错过了显而易见的东西吗? 有人能指出我的错误吗?在

谢谢!在

编辑:我只是写了一个小例子,试图重现这种行为,然而,要么它不存在,要么发生得太快。我有点困惑,出现的小窗口甚至有一个在代码中找不到的窗口标题(这个页面上没有的大的、巨大的代码块)。在

# -*- coding: UTF-8 -*-
import os
from Tkinter import *

class WARNING(Toplevel): #ok only dialog
       def __init__(self,parent,wtext,wtitle=''):
            Toplevel.__init__(self,parent)
            self.parent=parent
            self.protocol("WM_DELETE_WINDOW",self._NULL) #we need to include a check again...
            self.title(wtitle)
            self.attributes('-topmost',True)
            self.transient()
            mainWindow=Frame(self)
            tFrame=Frame(mainWindow)
            tLabel=Label(tFrame,text=wtext,height=3,bd=10)
            tLabel.pack()
            bFrame=Frame(mainWindow,bd=5)
            bOK=Button(bFrame,bd=1,text='Ok',command=self._DONE)
            bOK.pack(side='left')
            tFrame.grid(row=0,column=0)
            bFrame.grid(row=1,column=0,sticky=E)
            mainWindow.pack()

        def _DONE(self,Event=None):
            self.destroy()

        def _NULL():
            pass

    class WarnApp(Frame):

        def __init__(self,parent):
            Frame.__init__(self, parent)
            self.parent=parent
            self.initUI()

        def initUI(self):
            self.parent.title("Warning test")
            self.mainWindow = Frame(self.parent)
            B1=Button(self.mainWindow,command=self.Warn,text='Warn-Me')
            B1.pack(fill=BOTH)
            self.mainWindow.pack(fill=BOTH)
            self.pack(fill=BOTH)

        def Warn(self):
            warn=WARNING(self,wtext='This is a warning',wtitle='generic warning dialog')
            self.wait_window(warn)

    def main():
        root=Tk()
        app = WarnApp(root)
        app.mainloop()

    if __name__ == "__main__":
        main()
    `

Tags: textself应用程序titleinitdefframepack

热门问题