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
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()