Was soll man bei dem Attributnamen nehmen?

Fragen zu Tkinter.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Dieses tcl/tk Script benutzt Ziffern für die Namen:

Code: Alles auswählen

package require Tk
wm title . Calculator
grid [entry .e -textvar e -just right] -columnspan 5
bind .e <Return> =
set n 0
foreach row {
   {7 8 9 + -}
   {4 5 6 * /}
   {1 2 3 ( )}
   {C 0 . =  }
} {
   foreach key $row {
       switch -- $key {
           =       {set cmd =}
           C       {set cmd {set clear 1; set e ""}}
           default {set cmd "hit $key"}
       }
       lappend keys [button .[incr n] -text $key -command $cmd]
   }
   eval grid $keys -sticky we ;#-padx 1 -pady 1
   set keys [list]
}
grid .$n -columnspan 2 ;# make last key (=) double wide
proc = {} {
   regsub { =.+} $::e "" ::e ;# maybe clear previous result
   if [catch {set ::res [expr [string map {/ *1.0/} $::e]]}] {
       .e config -fg red
   }
   append ::e = $::res 
   .e xview end
   set ::clear 1
}
proc hit {key} {
   if $::clear {
       set ::e ""
       if ![regexp {[0-9().]} $key] {set ::e $::res}
       .e config -fg black
       .e icursor end
       set ::clear 0
   }
   .e insert end $key
}
set clear 0
focus .e           ;# allow keyboard input
wm resizable . 0 0
Wenn man diese GUI nach tkinter mit den Ziffern als Attributnamen konvertiert, dann funktioniert das nicht.

Wäre ein vorangestellter underscore in Ordnung, oder besser etwas anderes?

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        self.title('Calculator')
        self.geometry('179x132+669+0')
        self.resizable(0, 0)
        # widget definitions ===================================
        self._19 = tk.Button(self,text='=')
        self._19.grid(row=4, sticky='ew', column=3, columnspan=2)
        self._18 = tk.Button(self,text='.')
        self._18.grid(row=4, sticky='ew', column=2)
        self._17 = tk.Button(self,text='0')
        self._17.grid(row=4, sticky='ew', column=1)
        self._16 = tk.Button(self,text='C')
        self._16.grid(row=4, sticky='ew')
        self._15 = tk.Button(self,text=')')
        self._15.grid(row=3, sticky='ew', column=4)
        self._14 = tk.Button(self,text='(')
        self._14.grid(row=3, sticky='ew', column=3)
        self._13 = tk.Button(self,text='3')
        self._13.grid(row=3, sticky='ew', column=2)
        self._12 = tk.Button(self,text='2')
        self._12.grid(row=3, sticky='ew', column=1)
        self._11 = tk.Button(self,text='1')
        self._11.grid(row=3, sticky='ew')
        self._10 = tk.Button(self,text='/')
        self._10.grid(row=2, sticky='ew', column=4)
        self._9 = tk.Button(self,text='*')
        self._9.grid(row=2, sticky='ew', column=3)
        self._8 = tk.Button(self,text='6')
        self._8.grid(row=2, sticky='ew', column=2)
        self._7 = tk.Button(self,text='5')
        self._7.grid(row=2, sticky='ew', column=1)
        self._6 = tk.Button(self,text='4')
        self._6.grid(row=2, sticky='ew')
        self._5 = tk.Button(self,text='-')
        self._5.grid(row=1, sticky='ew', column=4)
        self._4 = tk.Button(self,text='+')
        self._4.grid(row=1, sticky='ew', column=3)
        self._3 = tk.Button(self,text='9')
        self._3.grid(row=1, sticky='ew', column=2)
        self._2 = tk.Button(self,text='8')
        self._2.grid(row=1, sticky='ew', column=1)
        self._1 = tk.Button(self,text='7')
        self._1.grid(row=1, sticky='ew')
        self.e = tk.Entry(self,textvariable='e', justify='right')
        self.e.grid(row=0, columnspan=5)

if __name__ == '__main__':
    Application().mainloop()
Zuletzt geändert von Anonymous am Donnerstag 3. August 2017, 18:47, insgesamt 1-mal geändert.
Grund: Quelltext in Codebox-Tags gesetzt.
Antworten