2015-08-28 80 views
0

Hello StackOverflow!Python - Tkinter編程。在事件循環中更改窗口標題

多次使用該網站,第一次我不得不問一個問題,所以提前致謝。對於一些背景,我正在編寫一個類似於Windows記事本的應用程序,它支持加密。這個想法是數據在寫入磁盤之前被加密,並增加了一個基本的安全層。

程序(如IDLE解釋程序)會在整個事件循環過程中更改窗口標題。例如。當您打開一個新文件時,窗口的圖塊將變爲文件的名稱。

(當時標題欄會後圖片,但沒有足夠的代表:()

起初,這使我相信,我將不得不每次打開文件時創建一個新的窗口,但是空閒設法星號*每TA打開新文件或創建/保存時間追加到窗口標題

我班初始化

class pad(): 

    def __init__(self,window): 

     window.title("Cyphertxt(Alpha) - An Encrypted Wordpad") 
     self.filepath = "" 

     from Resources.icon import ico 
     from os import remove 

     filename = ico()   
     window.wm_iconbitmap(filename) 
     remove(filename) 

     yscroll = Scrollbar(window) 
     yscroll.pack(side=RIGHT, fill=Y) 

     menubar = Menu(window) 
     window.config(menu=menubar) 
     filemenu = Menu(menubar) 
     menubar.add_cascade(label="File", menu=filemenu) 
     filemenu.add_command(label="New File    Ctrl+N", command=newf) 
     filemenu.add_command(label="Open     Ctrl+O", command=openf) 
     filemenu.add_command(label="Decrypt    Ctrl+R", command=self.decryptGUI) 
     filemenu.add_command(label="Save      Ctrl+S", command=self.encryptGUI) 
     filemenu.add_command(label="Overwrite   Ctrl+G", command=overwrite) 
     filemenu.add_command(label="Quit!     Ctrl+Q", command=squit) 
     helpmenu = Menu(menubar) 
     menubar.add_cascade(label='Help', menu=helpmenu) 
     helpmenu.add_command(label="About   ", command=about) 
     helpmenu.add_command(label="Help   F1", command=docs) 

     frame = Frame(window).pack() 
     self.t1 = Text(window, yscrollcommand=yscroll.set) 
     yscroll.config(command=self.t1.yview) 
     self.t1.pack(fill=BOTH, expand=YES) 

在這裏,我試圖重新分配的窗口標題,最後事情是c在打開的文件功能結束之前調整。

def openf(event=None): 

     pad.filepath = tkFileDialog.askopenfilename() 
    if pad.filepath == "": 
     pass 
    else: 
     pad.t1.delete(0.0, END) 
     pad.t1.insert(END, open(pad.filepath, "rb+").read()) 
     **pad.window.config(title=" %s Cyphertxt - An Encrypted Wordpad" % (pad.filepath))** 



AttributeError: pad instance has no attribute 'window' 

然後我試圖從類中調用的變化通過創建一個簡單的方法,並要求從openf功能:

def changetitle(self): 
     self.window.config(title="%s CypherTXT - An Encrypted Wordpad) 

def openf(event=None): 

    pad.filepath = tkFileDialog.askopenfilename() 
    if pad.filepath == "": 
     pass 
    else: 
     pad.t1.delete(0.0, END) 
     pad.t1.insert(END, open(pad.filepath, "rb+").read()) 
     **pad.changetitle()** 

這回:

NameError: global name 'window' is not defined 

我有試圖看看IDLE做到這一點的方式,但我一直無法解決。 Effbot往往也很好,但我無法在那裏找到答案。

我希望我已經解釋了我的問題不夠好,請幫助:)

回答

0

嘗試把

self.window = window 

在某處,__init__方法。否則,對window對象的引用將無法在其他任何地方訪問。

+0

我不敢相信我錯過了...非常感謝:) – RandomHash

+0

似乎Tkinter不喜歡C像字符串格式化%s返回一個錯誤,但我敢肯定,我可以工作,就足夠簡單:) – RandomHash

+0

@ 0x52-0x75-0x63-0x79:tkinter對C類字符串格式沒有問題。如果你遇到錯誤,你可能會做錯事。 –