<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用python做一個(gè)性格分析工具【GUI編程實(shí)例】

          共 3352字,需瀏覽 7分鐘

           ·

          2021-01-23 00:14



          九型人格

          九型人格是一個(gè)近年來倍受國(guó)際著名大學(xué)MBA學(xué)員推崇的課程之一,近十幾年來已風(fēng)行歐美學(xué)術(shù)界及工商界。
          全球500強(qiáng)企業(yè)的管理階層均有研習(xí)九型性格,并以此培訓(xùn)員工,建立團(tuán)隊(duì),提高執(zhí)行力。在當(dāng)代,它對(duì)于企業(yè)的前期規(guī)劃、戰(zhàn)略確定、教練指導(dǎo)、企業(yè)培訓(xùn)等方面,九型人格有很大的優(yōu)勢(shì)。
          九型人格不僅僅是一種精妙的性格分析工具,更主要的是為個(gè)人修養(yǎng)、自我提升和歷練提供更深入的洞察力。

          大家好,歡迎來到 Crossin的編程教室 !

          很多大公司在招聘和組建團(tuán)隊(duì)時(shí)很看重“性格分析”,而“九型人格”就是一個(gè)被用得很多的性格分析工具,其將性格心理與行為劃分為九類,并對(duì)應(yīng)每一類人最適合崗位與職責(zé)。咱們先不討論這個(gè)工具是否真的有效和合理。既然企業(yè)和領(lǐng)導(dǎo)們會(huì)用它,甚至關(guān)系到聘用和升職與否,那我們自然也得了解一下,知己知彼方能百戰(zhàn)不殆嘛。

          今天,我們就用Python開發(fā)一套帶界面的九型人格性格分析工具。提升編程技術(shù)的同時(shí),也可以順便了解下自己的性格分類!

          既然是九型人格分析,首先我們需要拿到它的測(cè)試題。翻了很久,在百度文庫上找到一份測(cè)試原題:
          https://wenku.baidu.com/view/19455024dd36a32d72758105.html

          測(cè)試題總共36道,通過各場(chǎng)景下的行為表現(xiàn),最終分析出你最接近的人格分類。現(xiàn)在題有了,如何做出測(cè)試題呢?我選擇使用Python的tkinter模塊,將測(cè)試題開發(fā)為一個(gè)可執(zhí)行的exe工具,說干就干!

          基礎(chǔ)準(zhǔn)備

          為了能將代碼打包成單獨(dú)的可執(zhí)行文件,我們需要先準(zhǔn)備測(cè)試題與對(duì)應(yīng)的答案,然后提前存儲(chǔ)在代碼中。我們需要進(jìn)行相關(guān)拆分,這種苦力活就交給擁有雷鋒精神的我來完成吧:


          界面開發(fā)

          界面無需太過復(fù)雜,提供說明、題目、選項(xiàng)作答、題目切換與操作按鈕即可。當(dāng)然,交卷后,需要顯示用戶的測(cè)試結(jié)果,那么開始吧!

          tkinter是python自帶的GUI模塊,無需另行安裝。對(duì)于像這種簡(jiǎn)單交互界面的小程序非常適合。并且,因?yàn)椴挥妙~外的庫,在后面打包exe的時(shí)候會(huì)少踩一些坑。

          30 minutes later……

          完成!

          Main.py

           1from?Enneagram_GUI?import?*
          2from?tkinter?import?*
          3
          4
          5def?center_window(root,?width,?height):
          6????screenwidth?=?root.winfo_screenwidth()
          7????screenheight?=?root.winfo_screenheight()
          8????size?=?'%dx%d+%d+%d'?%?(width,?height,?(screenwidth?-?width)?/?2,?(screenheight?-?height)?/?2)
          9????root.geometry(size)
          10
          11
          12root?=?Tk()
          13
          14center_window(root,?750,?700)
          15
          16root.resizable(width=False,?height=False)
          17root.title('九型人格測(cè)試?|?公眾號(hào):?清風(fēng)Python')
          18ExamPage(root)
          19root.mainloop()

          Enneagram_GUI.py

            1#?-*-?coding:?utf-8?-*-
          2#?@Author???:?王翔
          3#?@微信號(hào)???:?King_Uranus
          4#?@公眾號(hào)????:?清風(fēng)Python
          5#?@GitHub???:?https://github.com/BreezePython
          6#?@Date?????:?2019/11/12?23:12
          7#?@Software?:?PyCharm
          8#?@version ?:Python 3.7.3
          9#?@File?????:?Enneagram_GUI.py
          10
          11
          12#?coding:utf-8
          13from?tkinter?import?*
          14import?Enneagram_Exam
          15import?Enneagram_Result
          16import?tkinter.messagebox
          17
          18#?自測(cè)說明
          19Standard?=?'此份問卷共有36道測(cè)試題目,請(qǐng)?jiān)诿款}中選擇你認(rèn)為最恰當(dāng)或者最接近描述自己的性格行為的句子,\n'?\
          20???????????'請(qǐng)全部作答,最高分的項(xiàng)目很可能成為你的基本性格型態(tài)。'
          21
          22#?人格類型矩陣
          23Style_Dict?=?[
          24????{3:?2,?6:?2,?10:?2,?15:?2,?19:?1,?22:?2,?28:?2,?32:?2},
          25????{1:?1,?6:?1,?12:?1,?17:?2,?20:?1,?23:?1,?29:?1,?33:?1},
          26????{4:?1,?7:?1,?10:?1,?14:?2,?23:?2,?26:?2,?30:?1,?34:?1},
          27????{2:?1,?8:?2,?12:?2,?16:?1,?21:?2,?24:?1,?28:?1,?34:?2},
          28????{1:?2,?4:?2,?13:?1,?16:?2,?19:?2,?25:?1,?31:?1,?36:?1},
          29????{5:?1,?9:?2,?14:?1,?18:?1,?21:?1,?25:?2,?29:?2,?32:?1},
          30????{2:?2,?7:?2,?11:?2,?18:?2,?22:?1,?27:?2,?33:?2,?36:?2},
          31????{3:?1,?9:?1,?13:?2,?17:?1,?24:?2,?27:?1,?20:?2,?35:?2}
          32]
          33
          34
          35class?ExamPage:
          36????def?__init__(self,?master=None):
          37????????self.root?=?master
          38????????#?用戶結(jié)果集
          39????????self.user_result?=?{}
          40????????self.status?=?1
          41????????self.All_Exam?=?Enneagram_Exam
          42????????self.normal_choice?=?IntVar()
          43????????self.start_exam()
          44
          45????#?上一題方法
          46????def?before(self):
          47????????if?self.normal_choice.get()?!=?0:
          48????????????self.user_result[self.status]?=?self.normal_choice.get()
          49????????????if?self.status?>?1:
          50????????????????self.status?-=?1
          51????????????????self.body.grid_forget()
          52????????????????self.main_exam()
          53????????else:
          54????????????tkinter.messagebox.showwarning("提示:",?message="請(qǐng)先選擇答案!")
          55
          56????#?下一題方法
          57????def?after(self):
          58????????if?self.normal_choice.get()?!=?0:
          59????????????self.user_result[self.status]?=?self.normal_choice.get()
          60????????????if?self.status? 61????????????????self.status?+=?1
          62????????????????self.body.grid_forget()
          63????????????????self.main_exam()
          64????????else:
          65????????????tkinter.messagebox.showwarning("提示:",?message="請(qǐng)先選擇答案!")
          66
          67????#?獲取當(dāng)前題目
          68????def?exam_files(self,?num):
          69????????return?list(map(lambda?x:?x.split('.'),?self.All_Exam.Exam[num?-?1].strip().split('\n')))
          70
          71????#?交卷
          72????def?hand_paper(self):
          73????????self.user_result[self.status]?=?self.normal_choice.get()
          74????????if?len(self.user_result)?!=?36:
          75????????????tkinter.messagebox.showwarning("提示:",?message="您還有未完成的測(cè)試題!")
          76????????else:
          77????????????self.exam_result?=?LabelFrame(self.root,?text="測(cè)試結(jié)果",?padx=10,?pady=10,?fg="red",?font=("黑體",?'11'))
          78????????????self.exam_result.grid(padx=10,?pady=5,?sticky=NSEW)
          79????????????sc?=?Scrollbar(self.exam_result)
          80????????????sc.grid(row=0,?column=1,?sticky=NS)
          81????????????result_info?=?Text(self.exam_result,?font=("黑體",?'11'),?width=85,?yscrollcommand=sc.set)
          82????????????result_info.grid(row=0,?column=0,?sticky=NSEW)
          83????????????sc.config(command=result_info.yview)
          84????????????all_num?=?[]
          85????????????for?style?in?Style_Dict:
          86????????????????calc_num?=?list(
          87????????????????????point?for?point?in?self.user_result?if?point?in?style?and?self.user_result[point]?==?style[point])
          88????????????????if?calc_num?==?None:
          89????????????????????all_num.append(0)
          90????????????????else:
          91????????????????????all_num.append(len(calc_num))
          92????????????user_type?=?all_num.index(max(all_num))
          93????????????for?line?in?Enneagram_Result.Result[user_type]:
          94????????????????result_info.insert(END,?line)
          95
          96????#?啟動(dòng)測(cè)試所需控制按鈕
          97????def?start_exam(self):
          98????????self.title?=?LabelFrame(self.root,?text="自測(cè)說明",?padx=10,?pady=10,?fg="red",?font=("黑體",?'11'))
          99????????self.title.grid(padx=10,?pady=5)
          100????????note?=?Label(self.title,?text=Standard,?justify=LEFT,?font=("黑體",?'11'))
          101????????note.grid()
          102????????self.show?=?LabelFrame(self.root,?text="選項(xiàng)",?padx=10,?pady=10,?fg="red",?font=("黑體",?'11'))
          103????????self.show.grid(padx=10,?pady=5,?sticky=EW)
          104????????go_back?=?Button(self.show,?text="上一題",?width=8,?command=lambda:?self.before())
          105????????go_back.grid(row=4,?column=0,?padx=5,?pady=10)
          106????????to_forword?=?Button(self.show,?text="下一題",?width=8,?command=lambda:?self.after())
          107????????to_forword.grid(row=4,?column=1,?padx=5,?pady=10,?sticky=E)
          108????????hand_in?=?Button(self.show,?text="交卷",?width=8,?command=lambda:?self.hand_paper())
          109????????hand_in.grid(row=4,?column=2,?padx=5,?pady=10,?sticky=E)
          110????????exit_sys?=?Button(self.show,?text="退出",?width=8,?command=lambda:?sys.exit())
          111????????exit_sys.grid(row=4,?column=3,?padx=5,?pady=10,?sticky=E)
          112????????self.main_exam()
          113
          114????#?測(cè)試題主界面
          115????def?main_exam(self):
          116????????self.normal_choice.set(0)
          117????????self.body?=?LabelFrame(self.root,
          118???????????????????????????????text="測(cè)試題??第%s題,剩余%s題"?%?(self.status,?(len(Enneagram_Exam.Exam)?-?self.status)),
          119???????????????????????????????padx=10,?pady=10,?fg="red",?font=("黑體",?'11'))
          120????????self.body.grid(padx=10,?pady=5,?sticky=EW)
          121????????for?option,?choice?in?self.exam_files(self.status):
          122????????????authority_choice?=?Radiobutton(self.body,?text=choice,?variable=self.normal_choice,?value=option)
          123????????????authority_choice.grid(row=option,?sticky=W)
          124????????Label(self.body,?text="??第%s道題,用戶選擇的結(jié)果是:"?%?self.status,?fg="red",?font=("黑體",?'11')).grid(row=3,?column=0,
          125???????????????????????????????????????????????????????????????????????????????????????????????????sticky=W)
          126????????Label(self.body,?textvariable=self.normal_choice).grid(row=3,?column=0,?sticky=E)

          剩余的練習(xí)題與答案部分,可見完整代碼中。

          代碼完成之后,為了方便給其他人使用,我們需要先將代碼打包為exe。

          功能OK了,現(xiàn)在不要打擾我,我要做題了!

          運(yùn)行效果:

          我的答案是完美型,處女座總是在追求完美的路上跟自己死磕

          程序的代碼及打包好的exe在這里:

          https://pan.baidu.com/s/1tfYDbHgUce0RUJIEkFZcGQ?

          提取碼:umhr


          記得自測(cè)完后,告訴我你的所屬的類型哦!


          作者:王翔
          來源:清風(fēng)Python


          _往期文章推薦_

          用Python做一個(gè)Windows掃雷游戲




          瀏覽 145
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲免费看片 | 婷婷精品秘 进入 | 欧美性爱啪啪视频 | 日本黄色一级代 | 美女视频操逼 |