GUI로 만드는 계산기

 
import tkinter as tk # 계산기 클래스 정의 class Calculator: def __init__(self, master): self.master = master master.title("계산기") # 결과 텍스트 상자 생성 self.result_var = tk.StringVar() self.result_var.set("0") self.result = tk.Label(master, textvariable=self.result_var, font=('Arial', 20)) self.result.grid(columnspan=4) # 버튼 생성 self.create_button("7", 1, 0) self.create_button("8", 1, 1) self.create_button("9", 1, 2) self.create_button("/", 1, 3) self.create_button("4", 2, 0) self.create_button("5", 2, 1) self.create_button("6", 2, 2) self.create_button("*", 2, 3) self.create_button("1", 3, 0) self.create_button("2", 3, 1) self.create_button("3", 3, 2) self.create_button("-", 3, 3) self.create_button("0", 4, 0) self.create_button(".", 4, 1) self.create_button("C", 4, 2) self.create_button("+", 4, 3) self.create_button("=", 5, 0, columnspan=4) # 버튼 생성 함수 def create_button(self, text, row, column, columnspan=1, rowspan=1): button = tk.Button(self.master, text=text, font=('Arial', 16), width=5, height=2, command=lambda: self.click_button(text)) button.grid(row=row, column=column, columnspan=columnspan, rowspan=rowspan) # 버튼 클릭 이벤트 처리 함수 def click_button(self, text): if text == "=": try: result = eval(self.result_var.get()) self.result_var.set(str(result)) except: self.result_var.set("에러") elif text == "C": self.result_var.set("0") else: if self.result_var.get() == "0": self.result_var.set(text) else: self.result_var.set(self.result_var.get() + text) # 메인 코드 root = tk.Tk() calculator = Calculator(root) root.mainloop()
 
import wx class Calculator(wx.Frame): def __init__(self, parent, title): super(Calculator, self).__init__(parent, title=title, size=(300, 250)) self.InitUI() self.Centre() self.Show() def InitUI(self): vbox = wx.BoxSizer(wx.VERTICAL) self.textprint = wx.TextCtrl(self, style=wx.TE_RIGHT) self.equation = "" vbox.Add(self.textprint, flag=wx.EXPAND | wx.TOP | wx.BOTTOM, border=4) gridBox = wx.GridSizer(5, 4, 5, 5) labels = ['AC', 'DEL', 'pi', 'CLOSE', '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '=', '+'] for label in labels: buttonItem = wx.Button(self, label=label) self.createHandler(buttonItem, label) gridBox.Add(buttonItem, 1, wx.EXPAND) vbox.Add(gridBox, proportion=1, flag=wx.EXPAND) self.SetSizer(vbox) def createHandler(self, button, labels): items = ['DEL', 'AC', 'CLOSE'] if labels not in items: self.Bind(wx.EVT_BUTTON, self.OnAppend, button) if labels == 'DEL': self.Bind(wx.EVT_BUTTON, self.OnDel, button) if labels == 'AC': self.Bind(wx.EVT_BUTTON, self.OnAc, button) if labels == '=': self.Bind(wx.EVT_BUTTON, self.OnTarget, button) if labels == 'CLOSE': self.Bind(wx.EVT_BUTTON, self.OnExit, button) def OnAppend(self, event): eventbutton = event.GetEventObject() label = eventbutton.GetLabel() self.equation += str(label) self.textprint.SetValue(self.equation) def OnDel(self, event): self.equation = self.equation[:-1] self.textprint.SetValue(self.equation) def OnAc(self, event): self.textprint.Clear() self.equation = "" def OnTarget(self, event): string = self.equation try: target = str(eval(string)) self.equation = target self.textprint.SetValue(self.equation) except: self.textprint.SetValue("Wrong Format") self.equation = "" def OnExit(self, event): self.Close(True) if __name__ == '__main__': app = wx.App() Calculator(None, title='Calculator') app.MainLoop()
 
 
tkinter에서 접근성 관련 기능 지원하기
import tkinter as tk root = tk.Tk() # 버튼에 accesskey와 underline 옵션을 사용하여 액세스 키를 설정합니다. button = tk.Button(root, text="OK", underline=0) button.config(width=10, height=2, bd=4, relief="raised", underline=0, accesskey="O") button.pack(padx=10, pady=10) # 라벨 위젯에 labelFor 옵션을 사용하여 라벨과 관련된 위젯을 설정합니다. label = tk.Label(root, text="Username:") label.pack(padx=10, pady=10) entry = tk.Entry(root) entry.pack(padx=10, pady=10) label.config(labelFor=entry) root.mainloop()