{"id":370,"date":"2019-09-16T21:40:05","date_gmt":"2019-09-16T13:40:05","guid":{"rendered":"https:\/\/freeapp.sbs\/blog\/?p=370"},"modified":"2025-04-01T16:57:07","modified_gmt":"2025-04-01T07:57:07","slug":"y5wn9ugf4k8xhar","status":"publish","type":"post","link":"https:\/\/eternalsphere.net\/echoes\/index.php\/2019\/09\/16\/y5wn9ugf4k8xhar\/","title":{"rendered":"\u4f7f\u7528Python\u5199\u4e00\u4e2a\u5177\u6709GUI\u7684\u8ba1\u7b97\u5668"},"content":{"rendered":"<p><a href=\"https:\/\/medium.com\/@adeyinkaadegbenro\/project-build-a-python-gui-calculator-fc92bddb744d\">https:\/\/medium.com\/@adeyinkaadegbenro\/project-build-a-python-gui-calculator-fc92bddb744d<\/a><\/p>\n<p>\u8fd9\u4e2a\u8ba1\u7b97\u5668\u80fd\u591f\u8fdb\u884c\u52a0\u51cf\u4e58\u9664\u8fd0\u7b97\uff0c\u80fd\u663e\u793a\u5c0f\u6570\uff0c\u8fd8\u5177\u6709\u9000\u683c\u952e\uff0c\u80fd\u591f\u5220\u9664\u8f93\u5165\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">from tkinter import *\n\nclass Calculator:\n    def __init__(self, master):\n        self.master = master\n        master.title(\"Python Calculator\")\n\n        # create screen widget\n        self.screen = Text(master, state='disabled', width=30, height=3,background=\"yellow\", foreground=\"blue\")\n\n        # position screen in window\n        self.screen.grid(row=0,column=0,columnspan=4,padx=5,pady=5)\n        self.screen.configure(state='normal')\n\n        # initialize screen value as empty\n        self.equation = ''\n\n        # create buttons using method createButton\n        b1 =  self.createButton(7)\n        b2 = self.createButton(8)\n        b3 = self.createButton(9)\n        b4 = self.createButton(u\"\\u232B\",None)\n        b5 = self.createButton(4)\n        b6 = self.createButton(5)\n        b7 = self.createButton(6)\n        b8 = self.createButton(u\"\\u00F7\")\n        b9 = self.createButton(1)\n        b10 = self.createButton(2)\n        b11 = self.createButton(3)\n        b12 = self.createButton('*')\n        b13 = self.createButton('.')\n        b14 = self.createButton(0)\n        b15 = self.createButton('+')\n        b16 = self.createButton('-')\n        b17 = self.createButton('=',None,34)\n\n        # buttons stored in list\n        buttons = [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17]\n\n        # intialize counter\n        count = 0\n        # arrange buttons with grid manager\n        for row in range(1,5):\n            for column in range(4):\n                buttons[count].grid(row=row,column=column)\n                count += 1\n        # arrange last button '=' at the bottom\n        buttons[16].grid(row=5,column=0,columnspan=4)\n\n    def createButton(self,val,write=True,width=7):\n        # this function creates a button, and takes one compulsory argument, the value that should be on the button\n\n        return Button(self.master, text=val,command = lambda: self.click(val,write), width=width)\n\n    def click(self,text,write):\n        # this function handles what happens when you click a button\n        # 'write' argument if True means the value 'val' should be written on screen, if None, should not be written on screen\n        if write == None:\n\n            #only evaluate code when there is an equation to be evaluated\n            if text == '=' and self.equation: \n                # replace the unicode value of division .\/.with python division symbol \/ using regex\n                self.equation= re.sub(u\"\\u00F7\", '\/', self.equation)\n                print(self.equation)\n                answer = str(eval(self.equation))\n                self.clear_screen()\n                self.insert_screen(answer,newline=True)\n            elif text == u\"\\u232B\":\n                self.clear_screen()\n            \n            \n        else:\n            # add text to screen\n            self.insert_screen(text)\n        \n\n    def clear_screen(self):\n        #to clear screen\n        #set equation to empty before deleting screen\n        self.equation = ''\n        self.screen.configure(state='normal')\n        self.screen.delete('1.0', END)\n\n    def insert_screen(self, value,newline=False):\n        self.screen.configure(state='normal')\n        self.screen.insert(END,value)\n        # record every value inserted in screen\n        self.equation += str(value)\n        self.screen.configure(state ='disabled')\n\nroot = Tk()\nmy_gui = Calculator(root)\nroot.mainloop()<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/medium.com\/@adeyinkaadegbenro\/project-build-a-python-gui-calculator-fc92bddb744d \u8fd9\u4e2a\u8ba1\u7b97\u5668\u80fd\u591f\u8fdb\u884c\u52a0\u51cf\u4e58\u9664\u8fd0\u7b97\uff0c\u80fd\u663e\u793a\u5c0f\u6570\uff0c\u8fd8\u5177\u6709\u9000\u683c\u952e\uff0c\u80fd\u591f\u5220\u9664\u8f93\u5165\u7684\u5185\u5bb9\u3002 from tkinter import * class Calculator: def __init__(self, master): self.master = master master.title(&#8220;Python Calculator&#8221;) # create screen widget self.screen = Text(master, state=&#8217;disabled&#8217;, width=30, height=3,background=&#8221;yellow&#8221;, foreground=&#8221;blue&#8221;) # position screen in window self.screen.grid(row=0,column=0,columnspan=4,padx=5,pady=5) self.screen.configure(state=&#8217;normal&#8217;) # initialize screen value as empty self.equation = &#8221; # create buttons using method createButton b1 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-370","post","type-post","status-publish","format-standard","hentry","category-gkbvv54vpefdc"],"_links":{"self":[{"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/posts\/370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/comments?post=370"}],"version-history":[{"count":1,"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/posts\/370\/revisions"}],"predecessor-version":[{"id":2252,"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/posts\/370\/revisions\/2252"}],"wp:attachment":[{"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/media?parent=370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/categories?post=370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eternalsphere.net\/echoes\/index.php\/wp-json\/wp\/v2\/tags?post=370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}