2015-08-28 2 views
0

Привет всем в StackOverflow!Python - программирование Tkinter. Изменение названия окна во время цикла события

Используется сайт много раз, первый раз, когда я задал вопрос, так что спасибо заранее. Для немного фона, я пишу приложение, похожее на Windows Notepad, который поддерживает шифрование. Идея заключается в том, что данные зашифровываются перед записью на диск, добавляя базовый уровень безопасности.

Такие программы, как интерпретатор IDLE, изменяют заголовок окна в течение цикла события. НАПРИМЕР. когда вы открываете новый файл, фрагмент окна изменяется на имя файла.

(собирался разместить фото из заголовка, но не хватает респ :()

Сначала это приводит меня к мысли, что я должен был бы создать новое окно каждый раз, когда я открываю файл, однако простаивает удается добавить Звездочка * в заголовке окна каждый раз, когда та новый файл открыт или создан/сохраненную

Мой класс Init:.

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 alled до конца функции открытого файла.

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 удается это сделать, но я не смог его обработать. Эффект тоже хорош, но я не могу найти ответ.

Я надеюсь, что я объяснил моя проблема достаточно хорошо, пожалуйста, помогите :)

ответ

0

Попробуйте положить

self.window = window 

Где-то в вашем методе __init__. В противном случае ссылка на объект window не будет доступна нигде.

+0

Я не могу поверить, что я пропустил это ... Большое спасибо :) – RandomHash

+0

Кажется, что Tkinter не любит C, как форматирование строки% s возвращает ошибку, но я уверен, что смогу работать вокруг этого достаточно простого :) – RandomHash

+0

@ 0x52-0x75-0x63-0x79: tkinter не имеет проблемы с форматированием в виде строки C. Если вы получаете сообщение об ошибке, вы, вероятно, делаете что-то неправильно. –

Смежные вопросы