2014-04-18 26 views
5

Python 2.7 Tkinter kullanarak bir metin editörü üzerinde çalışıyoruz. Ben uygulamak çalışıyorum bir özelliği kullanıcı siyah arka plan ve geçiş düğmeye bir tıklama ile açıktan koyuya geçer hafif biri arasında geçiş yapabilirsiniz Gece Modu vardır.Python Tkinter: Bir geçiş düğmesi nasıl oluşturulur?

#!/usr/bin/env python 

from Tkinter import * 

from tkSimpleDialog import askstring 

from tkFileDialog import asksaveasfilename 
from tkFileDialog import askopenfilename 

from tkMessageBox import askokcancel 

Window = Tk() 
Window.title("TekstEDIT") 
index = 0 
/(code)/ 
class Editor(ScrolledText): 

    /(code)/ 
     Button(frm, text='Night-Mode', command=self.onNightMode).pack(side=LEFT) 
    /(code)/ 

    def onNightMode(self): 
    if index: 
     self.text.config(font=('courier', 12, 'normal'), background='black', fg='green') 

    else: 
     self.text.config(font=('courier', 12, 'normal')) 

    index = not index 

Ancak kod çalıştıran, bir gece modunda daima ve geçiş çalışmıyor. Yardım et. Kaynak Kodu: http://ideone.com/IVJuxX

cevap

0

Arka plan ve fg yalnızca if-cümlede ayarlanır. Sen else fıkrada da bunları ayarlamanız gerekir:

def onNightMode(self): 
    if index: 
     self.text.config(font=('courier', 12, 'normal'), background='black', fg='green') 

    else: 
     self.text.config(font=('courier', 12, 'normal')) 

    index = not index 

yani

else: 
    self.text.config(font=('courier', 12, 'normal'), background='green', fg='black') 
+1

'UnboundLocalError' olduğunu Global değişkene başvurmak istediğinizde varsayılan olarak yerel bir değişken yapan "indeks" atama nedeniyle. Hızlı düzeltme, işlev içinde 'global index 'ifadesini eklemektir. Fakat daha iyi bir düzeltme, değişken global kullanmanın ve bunun yerine 'index'in bir öznitelik özniteliği olan' self.index' yapmasını önlemektir. – unutbu

1
Sen Tkinter kitaplığı alabilirsiniz

(piton 2.7 için kullanın harf):

import Tkinter 
... Tkinter nesneleri oluşturma

root = tk.Tk() 

... ve Tkinter düğmesi

toggle_btn = tk.Button(text="Toggle", width=12, relief="raised") 
toggle_btn.pack(pady=5) 
root.mainloop() 

Şimdi kabartma özelliği oynarken basın "geçiş" etkisi yaratmak amacıyla "geçiş" olarak adlandırılan yeni bir komut düğmesi oluşturmak (batık veya kalkık) : sonunda

def toggle(): 

    if toggle_btn.config('relief')[-1] == 'sunken': 
     toggle_btn.config(relief="raised") 
    else: 
     toggle_btn.config(relief="sunken") 

Düğmenizi bu davranışı uygulanır:

toggle_btn = tk.Button(text="Toggle", width=12, relief="raised", command=toggle) 
+0

Kodunuz düzgün şekilde biçimlendirilmemiş. Ayrıca, sadece kod yanıtları genellikle kod ve açıklama gibi iyi değildir. Kodunuzun neden sorunu çözdüğünü biraz açıklayabilir misiniz? –

+0

ingilizceyi iyi bilmiyorum ama ben çok iyi piton biliyoruz: propely biçimlendirilmiş ne anlama geliyor? Python 2.7 için iyi çalışıyor! Kopyalayın ve bir metin dosyasına yapıştırın ve .py! 'Ye kaydedin. Kötü bir yorum vermeden önce test edin! Ben yorum yazdı zamanda – Albe

+0

, 'toggle' gövdesi' def' deyimi ile aynı girintili ve sen _not_ kopyalayıp yapıştırın olabilir. Düzenlemelerin geçmişine bakın ve orijinal sürümün girintiyi düzeltmek için başka biri tarafından düzenlendiğini göreceksiniz. –