##### KNOPF ##### class C_Knopf def initialize(farbe, mofarbe, cover, addtext, row, column) TkButton.new($r) { text cover bg farbe activebackground mofarbe width 2 command proc { $disp.addtext addtext } grid( "row" => row, "column" => column, "padx" => 1, "pady" => 1, "ipadx" => 10, "ipady" => 1, "sticky" => "ew" ) } end end ##### DISPLAY ##### class C_Display def initialize @text = "" @textobj = TkLabel.new($r) { width 32 borderwidth 4 relief 'sunken' foreground 'black' background '#CCFFCC' anchor 'w' grid( "row" => 0, "column" => 1, "columnspan" => 4, "ipady" => 5, "sticky" => "ew" ) } end def gettext return @text end def addtext(text) exit if text == "%QUIT%" $rechner.solve(@text) if text == "%SOLVE%" @text = "" if text == "%CLEAR%" @text += text if text[0].chr != "%" update end def settext(text) @text = text end def update @textobj.text = @text $r.update end end ##### RECHNER ##### class C_Rechner def start $r = TkRoot.new{ title 'Taschenrechner' } $disp = C_Display.new C_Knopf.new('#FF6666', '#FFAAAA', 'Quit', '%QUIT%', 1, 1) C_Knopf.new('#FFDDDD', '#FFEEEE', 'Clear', '%CLEAR%', 1, 2) C_Knopf.new('#DDDDDD', '#EEEEEE', '(', '(', 1, 3) C_Knopf.new('#DDDDDD', '#EEEEEE', ')', ')', 1, 4) C_Knopf.new('#DDDDFF', '#EEEEFF', '7', '7', 2, 1) C_Knopf.new('#DDDDFF', '#EEEEFF', '8', '8', 2, 2) C_Knopf.new('#DDDDFF', '#EEEEFF', '9', '9', 2, 3) C_Knopf.new('#DDDDDD', '#EEEEEE', '+', '+', 2, 4) C_Knopf.new('#DDDDFF', '#EEEEFF', '4', '4', 3, 1) C_Knopf.new('#DDDDFF', '#EEEEFF', '5', '5', 3, 2) C_Knopf.new('#DDDDFF', '#EEEEFF', '6', '6', 3, 3) C_Knopf.new('#DDDDDD', '#EEEEEE', '-', '-', 3, 4) C_Knopf.new('#DDDDFF', '#EEEEFF', '1', '1', 4, 1) C_Knopf.new('#DDDDFF', '#EEEEFF', '2', '2', 4, 2) C_Knopf.new('#DDDDFF', '#EEEEFF', '3', '3', 4, 3) C_Knopf.new('#DDDDDD', '#EEEEEE', '*', '*', 4, 4) C_Knopf.new('#DDDDDD', '#EEEEEE', '.', '.', 5, 1) C_Knopf.new('#DDDDFF', '#EEEEFF', '0', '0', 5, 2) C_Knopf.new('#DDDDDD', '#EEEEEE', '=', '%SOLVE%', 5, 3) C_Knopf.new('#DDDDDD', '#EEEEEE', '/', '/', 5, 4) Tk.mainloop end def solve(text) ret = eval("#{text}").to_s $disp.settext(ret) end end