上午零基础自学了Tkinter,用一下午的时间写了个心理测试工具。

开始界面

答题界面

结果显示
废话不多说,上代码。
from tkinter import *
root = Tk()
root.title("职业心理测量系统")
root.geometry("800x600")
number=0
answer=''
question=[['做题的时候有三种心态:过去经验中的我、真实现在的我、理想完美的我。\n全部以过去经验中的我去做测试题会容易得出自己过去的职业性格;\n全部以理想完美的我去做题会容易得出自己想象中的职业性格;\n以全部真实现在的我去做题,才会得出现在真实的职业性格。\n\n请根据第一印象作答,不必仔细推敲,答案没有好坏、对错之分。\n\n测试结束后,本测试会给出你的性格/兴趣和适合职业的报告。\n\n请放松心情,最大限度地摆脱各种外部环境的压力,尽量展现真实的自我。\n\n如果你真心想对自己有一个判断,那你就不应施加任何粉饰。否则,你应重测一次。','进入MBTI职业性格测试','进入SDS职业兴趣测试'],
['你倾向从何处得到力量:','别人','自己的想法'],
['当你参加一个社交聚会时,你会:','在夜色很深时,一旦你开始投入,也许就是最晚离开的那一个','在夜晚刚开始的时候,我就疲倦了并且想回家'],
['下列哪一件事听起来比较吸引你?','与情人到有很多人且社交活动频繁的地方','待在家中与情人做一些特别的事情,例如说观赏一部有趣的录影带并享用你最喜欢的外卖食物'],
['在约会中,你通常:','整体来说很健谈','较安静并保留,直到你觉得准备好了,才开始说话'],
['过去,你遇见你大部分的异性朋友是','在宴会中、学习工作上、休闲活动中、会议上或当朋友介绍我给他们的朋友时','通过私人的方式,例如网站、网络聊天,或是由亲密的朋友和家人介绍'],
['你倾向拥有:','很多认识的人和很亲密的朋友','一些很亲密的朋友和一些认识的人'],
['过去,你的朋友和同事倾向对你说:','你难道不可以安静一会儿吗?','可以请你从你的世界中出来一下吗?'],
['你倾向通过以下哪种方式收集信息:','对有可能发生之事的想像和期望','你对目前状况的实际认知'],
['你倾向相信:','你的直觉','你直接的观察和现成的经验'],
['你一般这样处理人际关系:','经常与人联络,因为你相信一段关系永远有进步的空间','如果人际关系没有被破坏,就不去修补它'],
['当你对一个约会觉得放心时,你偏向谈论:','未来,关于改进或发明事物和生活的种种可能性。\n例如,你谈论一个新的科学发明,或一个更好的方法来表达你的感受','实际的、具体的、关于“此时此地”的事物。\n例如,你也许会谈论品酒的好方法,或你即将要参加的新奇旅程。'],
['你是这种人:','喜欢先纵观全局','喜欢先掌握细节'],
['你是这类型的人:','与其活在现实中,不如活在想像里','与其活在想像里,不如活在现实中'],
['你通常:','偏向于去想像一大堆关于即将来临的约会的事情','拘谨地想像即将来临的约会,只期待让它自然地发生'],
['你倾向如此做决定:','首先依你的心意,然后依你的逻辑','首先依你的逻辑,然后依你的心意'],
['你倾向比较能够察觉到:','当人们需要情感上的支持时','当人们不合逻辑时'],
['当和某人分手时:','你通常让自己的情绪深陷其中,很难抽身出来','虽然你觉得受伤,但一旦下定决心,你会直截了当地将过去恋人的影子甩开'],
['当与一个人交往时,你倾向于看重:','情感上的相容性:表达爱意和对另一半的需求很敏感','智慧上的相容性:沟通重要的想法;客观地讨论和辩论事情'],
['当你不同意情人的想法时:','你尽可能地避免伤害对方的感情;若是会对对方造成伤害的话,你就不会说','你通常毫无保留地说话,并且对情人直言不讳,因为对的就是对的'],
['认识你的人倾向形容你为:','热情和敏感','逻辑和明确'],
['你把大部分和别人的相遇视为:','友善及重要的','另有目的'],
['若你有时间和金钱,你的朋友邀请你到国外度假,并且在前一天才通知,你会:','必须先检查你的时间表','立刻收拾行装'],
['在第一次约会中:','若你所约的人来迟了,你会很不高兴','一点儿都不在乎,因为你自己也会迟到'],
['你偏好:','事先知道约会的行程:要去哪里、有谁参加、你会在那里多久、该如何打扮','让约会自然地发生,不做太多事先的计划'],
['你选择的生活充满着:','日程表和组织','自然发生和弹性'],
['出席会议时,哪一项较常见:','你先入会场而其他人随后来到','大部分人都先到而你最后一个来'],
['你是这种喜欢……的人:','下定决心并且做出最后肯定的结论','放宽你的选择面并且持续收集信息'],
['你是此类型的人:','喜欢在一段时间里专心于一件事情直到完成','享受同时进行好几件事情'],
['1.我喜欢把一件事情做完后再做另一件事。','是','否'],
['2.在工作中我喜欢独自筹划,不愿受别人指导。','是','否'],
['3.在集体讨论中,我往往保持沉默。','是','否'],
['4.我喜欢做戏剧、音乐、歌舞、新闻采访等方面的工作。','是','否'],
['5.每次写信我都一挥而就,不再重复。','是','否'],
['6.我经常不停地思考某一问题,直到想出正确的答案。','是','否'],
['7.对别人借我的和我借别人的东西,我都能记得很清楚。','是','否'],
['8.我喜欢抽象思维的工作,不喜欢动手的工作。','是','否'],
['9.我喜欢成为人们注意的焦点。','是','否'],
['10.我喜欢不时地夸耀一下自己取得的好成就。','是','否'],
['11.我很渴望参加探险活动。','是','否'],
['12.我独处时更愉快。','是','否'],
['13.我喜欢在做事情前,对此事情做出细致的安排。','是','否'],
['14.我讨厌修理自行车、电器一类的工作。','是','否'],
['15.我喜欢参加各种各样的聚会。','是','否'],
['16.我愿意从事虽然工资少、但是比较稳定的职业。','是','否'],
['17.音乐能使我陶醉。','是','否'],
['18.我办事很少思前想后。','是','否'],
['19.我在处理工作事务时,喜欢经常请示上级。','是','否'],
['20.比较普通的游戏,我更喜欢需要动脑子的智力游戏。','是','否'],
['21.我很难持续集中注意力在2小时以上。','是','否'],
['22.我喜欢亲自动手制作一些小玩意儿,从中得到乐趣。','是','否'],
['23.我的动手能力很差。','是','否'],
['24.和不熟悉的人交谈对我来说毫不困难。','是','否'],
['25.和别人谈判时,我总是很容易放弃自己的观点。','是','否'],
['26.我很容易结识同性别的朋友。','是','否'],
['27.我做人做事,既不悲观,也不偏激,属于不偏不倚的温和型。','是','否'],
['28.当我开始做一件事情后,即使碰到再多的困难,我也要执著地干下去。','是','否'],
['29.我是一个沉静而不易动感情的人。','是','否'],
['30.做事情时,我喜欢避免干扰。','是','否'],
['31.我的理想是当一名科学家。','是','否'],
['32.与言情小说相比,我更喜欢推理小说。','是','否'],
['33.有些人太霸道,有时明明知道他们是对的,也要和他们对着干。','是','否'],
['34.我爱幻想。','是','否'],
['35.我总是主动地向别人提出自己的建议。','是','否'],
['36.我喜欢使用钳子、榔头、螺丝刀、万用表一类的工具。','是','否'],
['37.我乐于助人。','是','否'],
['38.我更喜欢自己下了赌注的比赛或游戏。','是','否'],
['39.我喜欢按部就班地完成要做的工作。','是','否'],
['40.我希望能经常换不同的工作来做。','是','否'],
['41.与朋友约好了见面,我总留有充裕的时间以免迟到。','是','否'],
['42.我喜欢阅读自然科学方面的书籍和杂志。','是','否'],
['43.如果掌握一门精湛的手艺并能以此赚到足够多的钱,我会感到满足。','是','否'],
['44.我渴望当一名司机。','是','否'],
['45.听别人谈“家中被盗”一类的事,很难引起我的同情。','是','否'],
['46.如果待遇相同,我宁愿当商品推销员,而不愿当图书管理员。','是','否'],
['47.我讨厌跟各类机械打交道。','是','否'],
['48.我小时候经常把玩具拆开,把里面看个究竟。','是','否'],
['49.当接受新任务后,我喜欢以自己的独特方法去完成它。','是','否'],
['50.我有文艺方面的天赋。','是','否'],
['51.我喜欢把一切安排得整整齐齐、井井有条。','是','否'],
['52.我喜欢做一名教师。','是','否'],
['53.和一群人在一起的时候,我总想不出恰当的话来说。','是','否'],
['54.看情感影片时,我常禁不住眼圈红润。','是','否'],
['55.我讨厌学数学。','是','否'],
['56.假如将我单独一个人留在实验室做实验,我会感到非常无聊。','是','否'],
['57.对于急躁、爱发脾气的人,我仍能以礼相待。','是','否'],
['58.遇到难解答的题目时,我常常中途放弃,改做下一题。','是','否'],
['59.大家公认我是一名勤劳踏实的、愿为大家服务的人。','是','否'],
['60.我喜欢做管理下属的工作。','是','否']]
dic={"ENFJ":"(外向、直觉、感觉、判断型)\n\n这种人有爱心,对生活充满热情。他们往往对自己很挑剔。\n不过,由于他们自认为要为别人的感受负责,所以很少在公众场合发表批评意见。\n他们对行为的是非曲直明察秋毫,是社交高手。\n\n这种人最适合的工作是,工作中能建立温磬的人际关系,\n能使自己置身于自己信赖、且富有创意的人群中工作。\n他们希望工作多姿多彩,但又能有条不紊地干。\n\nENFJ适合的职业:人力资源开发培训人员、销售经理、小企业经理、\n程序设计员、生态旅游业专家、广告客户经理、公关专业人士、\n协调人、交流总裁、作家/记者、非营利机构总裁。",
"ENFP":"(外向、直觉、感觉、认知型)\n\n这类人热情奔放,满脑子新观念。他们乐观、率性、充满自信和创造性,\n能深刻认识到哪些事可为。他们对灵感推崇备至,是天生的发明家。\n他们不墨守成规,善于闯新路子。\n\n这类人适合的工作是,在创造性灵感的推动下,与不同的人群合作从事各种项目;\n他们不喜欢从事需要自己亲自处理日常琐碎杂务的工作,喜欢按自己的工作节奏行事。\n\nENFP适合的职业:人力资源经理、变革管理顾问、营销经理、\n企业/团队培训人员、广告客户经理、战略规划人员、宣传人员、事业发展顾问、\n环保律师、研究助理、广告撰稿员、播音员、开发总裁。",
"ENTJ":"(外向、直觉、思考、判断型)\n\n这种人是极为有力的领导人和决策者,能明察一切事物中的各种可能性,\n喜欢发号施令。他们是天才的思想家,做事深谋远虑、策划周全。\n这种人事事力求做好,生就一双锐眼,能够一针见血地发现问题并迅速找到改进方法。\n\n最令这类人满意的事业是,做领导、发号施令,完善企业的运作系统,\n使系统高效运行并如期达到目标。他们喜欢从事长远战略规划,\n寻求创造性的解决问题的方式。\n\nENTJ适合的职业:(人事、销售、营销)经理、技术培训人员、\n(后勤、电脑信息服务和组织重建)顾问、国际销售经理、特许经营业主、\n程序设计员、环保工程师",
"ENTP":"(外向、直觉、思考、认知型)\n\n这种人好激动、健谈、聪明、是个多面手。他们总是孜孜以求地提高自己的能力。\n这种人天生有创业心、爱钻研、机敏善变、适应能力强。\n\n令这类人满意的工作是:有机会从事创造性解决问题的工作。\n工作有一定的逻辑顺序和公正的标准。希望通过工作能提高个人权力并常与权力人物交流。\n\nENTP适合的职业:人事系统开发人员、投资经纪人、工业设计经理、\n后勤顾问、金融规划师、投资银行业职员、营销策划人员、广告创意指导、\n国际营销商。",
"ESFJ":"(外向、感知、感觉、判断型)\n\n这种类型的人喜欢通过直接合作以切实帮助别人。由于他们尤其注重人际关系,\n因而通常很受人欢迎,也喜欢迎合别人。他们的态度认真、\n遇事果断、通常表达意见坚决。\n\n这类人最满意的事业是,整天与人交往,密切参与整个决策流程。\n工作的目标明确,有明确的业绩标准。他们希望能组织安排自己及周围人的工作,\n以确保一切进展得尽可能顺利。\n\nESFJ适合的职业:公关客户经理、个人银行业务员、销售代表、\n人力资源顾问、零售业主、餐饮业者、房地产经纪人、营销经理、\n电话营销员、办公室经理、接待员、信贷顾问、簿记员、口笔译人员。",
"ESFP":"(外向、感知、感觉、认知型)\n\n这一类人生性爱玩、充满活力,用自己的陶醉来为别人增添乐趣。\n他们适应性强,平易随和,可以热情饱满地同时参加几项活动。\n他们不喜欢把自己的意志强加于人。\n\n对于这类人来说,适合的工作是,能在实践中学习,\n利用常识搜集各种事实来寻找问题的解决方案;他们喜欢直接与顾客和客户打交道;\n能同时在几个项目或活动中周旋。尤其爱从事能发挥自己审美观的项目或活动。\n\nESFP适合的职业:公关专业人士、劳工关系调解人、零售经理、商品规划师、\n团队培训人员、旅游项目经营者、表演人员、特别事件的协调人、\n社会工作者、旅游销售经理、融资者、保险代理/经纪人。",
"ESTJ":"(外向、感知、思考、判断型)\n\n这种人办事能力强,喜欢出风头,办事风风火火。他们责任心强、\n诚心诚意、忠于职守。他们喜欢框架,能组织各种细节工作,\n能如期实现目标并力求高效。\n\n此类型的人适合做理顺事实和政策以及人员组织工作,\n能够有效利用时间和资源以找出合乎逻辑的解决方案,\n在目标明确的工作中姝运用娴熟的技能。他们希望工作测评标准公正。\n\nESTJ适合的职业:银行官员、项目经理、数据库经理、信息总监、后勤与供应经理、\n业务运作顾问、证券经纪人、电脑分析人员、保险代理、普通承包商、工厂主管。",
"ESTP":"(外向、感知、思考、认知型)\n\n这类人无忧无虑,属乐天派。他们活泼、随和、率性,喜欢安于现状,\n不愿从长计议。由于他们能够接受现实,一般心胸豁达、包容心强。\n这种人喜欢玩实实在在的东西,善于拆拆装装。\n\n对这种人来说,事业满意度来自这种工作:能随意与许多人交流;\n工作中充满冒险和乐趣,能冒险和随时抓住新的机遇;\n工作中当自己觉得必要时希望自我组织,而不是听从别人的安排。\n\nESTP适合的职业:企业家、业务运作顾问、个人理财专家、证券经纪人、银行职员、\n预算分析者、技术培训人员、综合网络专业人士、旅游代理、促销商、手工艺人、\n新闻记者、土木/工业/机械工程师。",
"INFJ":"(内向、直觉、感觉、判断型)\n\n这种人极富创意。他们感情强烈、原则性强且具有良好的个人品德,\n善于独立进行创造性思考。即使面对怀疑,他们对自己的观点仍坚信不疑。\n看问题常常更能入木三分。\n\n对他们来说,称心如意的事业就是,能从事创新型的工作,\n主要是能帮助别人成长。他们喜欢生产或提供一种自己能感到自豪的产品或服务。\n工作必须符合个人的价值观。\n\nINFJ适合的职业:人力资源经理、事业发展顾问、营销人员、企业组织发展顾问、\n职位分析人员、企业培训人员、媒体特约规划师、编辑/艺术指导(杂志)、\n口译人员、社会科学工作者。",
"INFP":"(内向、直觉、感觉、认知型)\n\n此类型的人珍视内在和谐胜过一切。他们敏感、理想化、忠心耿耿,\n在个人价值观方面有强烈的荣誉感。如果能献身自己认为值得的事业,他们便情绪高涨。\n在日常事物中,他们通常很灵活、有包容心,但对内心忠诚的事业义无反顾。\n这类人很少表露强烈的情感,常显得镇静自若、寡言少语。\n不过,一旦相熟,他们也会变得十分热情。\n\n对此类型的人而言,最好的工作是,做合乎个人价值观、\n能通过工作陈述自己远见的工作;工作环境需要有灵活的架构,\n在自己激情高昂时可以从事各种项目;能发挥个人的独创性。\n\nINFP适合的职业:人力资源开发专业人员、社会科学工作者、团队建设顾问、\n编辑、艺术指导、记者、口笔译人员、娱乐业人士、建筑师、研究工作者、\n顾问、心理学专家。",
"INTJ":"(内向、直觉、思考、判断型)\n\n这类人是完美主义者。他们强烈要求自主、看重个人能力、\n对自己的创新思想坚定不移,并受其驱使去实现自己的目标。\n这种人逻辑性强,有判断力,才华横溢,对人对己要求严格。\n在所有类型的人中,这种人独立性最强,喜欢我行我素。\n面对反对意见,他们通常多疑、霸道、毫不退让。\n对权威本身,他们毫不在乎,但只要规章制度有利于他们的长远目标他们就能遵守。\n\n最适合的工作是:能创造和开发新颖的解决方案来解决问题或改进现有系统;\n他们愿意与责任心强,在专业知识、智慧和能力方面能赢得自己敬佩的人合作;\n他们喜欢独立工作,但需要定期与少量智囊人物切磋交流。\n\nINTJ适合的职业:管理顾问、经济学者、国际银行业务职员、金融规划师、\n设计工程师、运作研究分析人员、信息系统开发商、综合网络专业人员。",
"INTP":"(内向、直觉、思考、认知型)\n\n这类人善于解决抽象问题。他们经纶满腹,时能闪现出创造的睿智火花。\n他们外表恬静,内心专注,总忙于分析问题。他们目光挑剔,独立性极高。\n\n对于这类人,事业满意源自这样的工作:能酝酿新观念;专心负责某一创造性流程,\n而不是最终产品。在解决复杂问题时,能让他们跳出常规的框框,\n冒一定风险去寻求最佳解决方案。\n\nINTP适合的职业:电脑软件设计师、系统分析人员、研究开发专业人员、战略规划师、\n金融规划师、信息服务开发商、变革管理顾问、企业金融律师。",
"ISFJ":"(内向、感知、感觉、判断型)\n\n这种人忠心耿耿、一心一意、富有同情心,喜欢助人为乐。\n由于这种人有很强的职业道德,一旦觉得自己的行动确有帮助,他们便会担起重担。\n\n最令他们满意的工作是,需要细心观察和精确性要求极高的工作。\n他们需要通过不声不响地在背后工作以表达自己的感情投入,但个人贡献要能得到承认。\n\nISFJ适合的职业:人事管理人员、簿记员、电脑操作员、顾客服务代表、\n信贷顾问、零售业主、房地产代理或经纪人、艺术人员、室内装潢师、\n商品规划师、语言病理学者。",
"ISFP":"(内向、感知、感觉、认知型)\n\n这种类型的人温柔、体贴、敏感,从不轻言非常个人化的理想及价值观。\n他们常通过行动,而非语言来表达炽烈的情感。这种人有耐心、能屈能伸、\n且十分随和、无意控制他人。他们从不妄加判断或寻求动机和意义。\n\n适合的工作是,做非常符合自己内心价值观的工作。\n在做有益他人的工作时,希望注重细节。他们希望有独立工作的自由,\n但又不远离其他与自己合得来的人。他们不喜欢受繁文缛节或一些僵化程序的约束。\n\nISFP适合的职业:优先顾客销售代表、行政人员、商品规划师、测量师、\n海洋生物学者、厨师、室内/风景设计师、旅游销售经理、职业病理专业人员。",
"ISTJ":"(内向、感知、思考、判断型)\n\n这种人一丝不苟、认真负责,而且明智豁达,是坚定不移的社会维护者。\n他们讲求实际、非常务实,总是孜孜以求精确性和条理性,而且有极大的专注力。\n不论干什么,他们都能有条不紊、四平八稳地把它完成。\n\n对这类人而言,满意的工作是技术性的工作,能生产一种实实在在的产品或有条理地提供一种周详服务。\n他们需要一种独立的工作环境,有充裕的时间让自己独立工作,并能运用自己卓越的专注力来完成工作。\n\nISTJ适合的职业:审计员、后勤经理、信息总监、预算分析员、工程师、\n技术作者、电脑编程员、证券经纪人、地质学者、医学研究者、会计、文字处理专业人士。",
"ISTP":"(内向、感知、思考、认知型)\n\n这种人奉行实用主义,喜欢行动,不爱空谈。他们长于分析、敏于观察、好奇心强,\n只相信可靠确凿的事实。由于非常务实,他们能很好地利用一切可资利用的资源,\n而且很会瞧准时机。\n\n对于这种人而言,事业满意就是,做尽可能有效利用资源的工作。\n他们愿意精通机械技能或使用工具来工作。工作必须有乐趣、有活力、独立性强,\n且常有机会走出工作室去户外。\n\nISTP适合的职业:证券分析员、银行职员、管理顾问、电子专业人士、\n技术培训人员、信息服务开发人员、软件开发商、海洋生物学者、\n后勤与供应经理、经济学者。",
"A":"艺术型\n\n共同特点:有创造力,渴望表现自己的个性,实现自身的价值。做事理想化,追求完美,不重实际。\n具有一定的艺术才能和个性。善于表达,怀旧,心态较为复杂。\n\n性格特点:有创造性,非传统的,敏感,容易情绪化,较冲动,不服从指挥。\n\n职业建议:艺术兴趣高的人倾向于理想化,做事追求完美。在平常中,艺术的测试不指做艺术工作,\n而是工作中的艺术,倾向于将事情做得漂亮、有美感、有情调、锦上添花、追求完美。",
"S":"社会型\n\n共同特点:喜欢与人交往、不断结交新的朋友、善言谈、愿意教导别人。\n关心社会问题、渴望发挥自己的社会作用。寻求广泛的人际关系,比较看重社会义务和社会道德。\n\n性格特点:为人友好、热情、善解人意、乐于助人。\n\n职业建议:教育工作者(教师、教育行政人员),社会工作者(咨询人员、公关人员)。",
"R":"现实型\n\n共同特点:愿意使用工具从事操作性工作,动手能力强,做事手脚灵活,动作协调。\n偏好于具体任务,不善言辞,做事保守,较为谦虚。缺乏社交能力,通常喜欢独立做事。\n\n性格特点:感觉迟钝、不讲究、谦逊的。踏实稳重、诚实可靠。\n\n职业建议:技术性职业(计算机硬件人员、摄影师、制图员、机械装配工),\n技能性职业(木匠、厨师、技工、修理工、农民、一般劳动)。",
"I":"研究型\n\n共同特点:思想家而非实干家,抽象思维能力强,求知欲强,肯动脑,善思考,不愿动手。\n喜欢独立的和富有创造性的工作。知识渊博,有学识才能,不善于领导他人。\n考虑问题理性,做事喜欢精确,喜欢逻辑分析和推理,不断探讨未知的领域。\n\n性格特点:坚持性强,有韧性,喜欢钻研。为人好奇,独立性强。\n\n职业建议:科学研究人员、教师、工程师、电脑编程人员、医生、系统分析员。",
"E":"企业型\n\n共同特点:追求权力、权威和物质财富,具有领导才能。喜欢竞争、敢冒风险、有野心/抱负。\n为人务实,习惯以利益得失、权利、地位、金钱等来衡量做事的价值,做事有较强的目的性。\n\n性格特点:善辩、精力旺盛、独断、乐观、自信、好交际、机敏、有支配愿望。\n\n职业建议:项目经理、销售人员、营销管理人员、政府官员、企业领导、法官、律师。",
"C":"传统型\n\n共同特点:尊重权威和规章制度,喜欢按计划办事,细心、有条理,\n习惯接受他人的指挥和领导,自己不谋求领导职务。喜欢关注实际和细节情况,\n通常较为谨慎和保守,缺乏创造性,不喜欢冒险和竞争,富有自我牺牲精神。\n\n性格特点:有责任心、依赖性强、高效率、稳重踏实、细致、有耐心。\n\n职业建议:秘书、办公室人员、记事员、会计、行政助理、图书馆管理员、出纳员、打字员、投资分析员。"}
#头部标题
title_l=Label(root,text="职业心理测量系统",bg="red",font=('Arial',12),width=90,height=2)
title_l.pack()
#题目内容显示
text_l=Label(root,text=question[number][0],bg="white",font=('Arial',12),width=90,height=22,anchor='center')
text_l.pack()
#图形画布
canvas = Canvas(root,height=200,width=200,background='white',bd=-1)
#答题选择按纽
select_var=StringVar()#实例化选项变量
def selection():
global number,answer
s=select_var.get()#获取选项信息
answer=answer[:number]+s+answer[number+1:]#保存
#进入下一题
if number==28 and answer[0]=="A":
change_schedule(1,1)#100%
select_var.set("C")
EI,NS,FT,JP=0,0,0,0
for i in answer[1:8]:
EI+= 1 if i=='A' else 0
for i in answer[8:15]:
NS+= 1 if i=='A' else 0
for i in answer[15:22]:
FT+= 1 if i=='A' else 0
for i in answer[22:29]:
JP+= 1 if i=='A' else 0
#计算分数,显示结果
l=''
l+="E" if EI>=4 else "I"
l+="N" if NS>=4 else "S"
l+="F" if FT>=4 else "T"
l+="J" if JP>=4 else "P"
m="测试完成,结果如下:\n外向■"+"■"*EI+"□"*(7-EI)+"□内向\n"+"直觉■"+"■"*NS+"□"*(7-NS)+"□感知\n"+"感觉■"+"■"*FT+"□"*(7-FT)+"□思考\n"+"判断■"+"■"*JP+"□"*(7-JP)+"□认知\n\n"
t=m+"你的MBTI类型是"+l+dic[l]
text_l.config(text=t)
select_r1.config(text="",state="disabled")
select_r2.config(text="",state="disabled")
elif number==60 and answer[0]=="B":
change_schedule(1,1)#100%
#记分
R,I,A,S,E,C = 0,0,0,0,0,0
for i in [2,13,22,36,43]:
if answer[i]=="A":
R+=1
for i in [14,23,44,47,48]:
if answer[i]=="B":
R+=1
for i in [6,8,20,30,31,42]:
if answer[i]=="A":
I+=1
for i in [21,55,56,58]:
if answer[i]=="B":
I+=1
for i in [4,9,10,17,33,34,49,50,54]:
if answer[i]=="A":
A+=1
for i in [32]:
if answer[i]=="B":
A+=1
for i in [26,37,52,59]:
if answer[i]=="A":
S+=1
for i in [1,12,15,27,45,53]:
if answer[i]=="B":
S+=1
for i in [11,24,28,35,38,46,60]:
if answer[i]=="A":
E+=1
for i in [3,16,25]:
if answer[i]=="B":
E+=1
for i in [7,19,29,39,41,51,57]:
if answer[i]=="A":
C+=1
for i in [5,18,40]:
if answer[i]=="B":
C+=1
#画图
l1 = canvas.create_polygon(100,20,170,60,170,140,100,180,30,140,30,60,fill="white",width=1,outline='black')
l = canvas.create_polygon(100,100-8*R,100+7*I,100-4*I,100+7*A,100+4*A,100,100+8*S,100-7*E,100+4*E,100-7*C,100-4*C,fill="#FFFFF0",width=2,outline='#D2B48C')
l2 = canvas.create_line(100,20,100,180)
l3 = canvas.create_line(170,60,30,140)
l4 = canvas.create_line(170,140,30,60)
l5 = canvas.create_line(100,60,135,80)
l6 = canvas.create_line(135,80,135,120)
l7 = canvas.create_line(135,120,100,140)
l8 = canvas.create_line(100,140,65,120)
l9 = canvas.create_line(65,120,65,80)
l0 = canvas.create_line(65,80,100,60)
oval1 = canvas.create_oval(97,97-8*R, 103,103-8*R, fill='red',width=0)
oval2 = canvas.create_oval(97+7*I,97-4*I, 103+7*I,103-4*I, fill='red',width=0)
oval3 = canvas.create_oval(97+7*A,97+4*A, 103+7*A,103+4*A, fill='red',width=0)
oval4 = canvas.create_oval(97,97+8*S, 103,103+8*S, fill='red',width=0)
oval5 = canvas.create_oval(97-7*E,97+4*E, 103-7*E,103+4*E, fill='red',width=0)
oval6 = canvas.create_oval(97-7*C,97-4*C, 103-7*C,103-4*C, fill='red',width=0)
t1 = canvas.create_text(100,15,text = 'R现实')
t2 = canvas.create_text(180,53,text = 'I研究')
t3 = canvas.create_text(180,147,text = 'A艺术')
t4 = canvas.create_text(100,185,text = 'S社会')
t5 = canvas.create_text(20,147,text = 'E企业')
t6 = canvas.create_text(20,53,text = 'C传统')
canvas.place(relx=0.5, rely=0, x=0, y=70,anchor='n')
#算分
sd=[(R,'R'),(I,'I'),(A,'A'),(S,'S'),(E,'E'),(C,'C')]
sds=sd[0]
sdss=[]
sdsss=[]
for i in sd[1:]:
if i[0]>sds[0]:
sds=i
for i in sd:
if i[0]==sds[0]:
sdss.append(i)#把所有等于最大值的加入新列表
for i in sdss:
if i[1]=='R':
sdsss.append(I+C-S)
elif i[1]=='I':
sdsss.append(R+A-E)
elif i[1]=='A':
sdsss.append(I+S-C)
elif i[1]=='S':
sdsss.append(E+A-R)
elif i[1]=='E':
sdsss.append(C+S-I)
elif i[1]=='C':
sdsss.append(E+R-A)
#显示
select_var.set("C")
text_l.config(text="测试完成,结果如下:\n\n\n\n\n\n\n\n\n\n\n\n\n你的职业兴趣类型是"+dic[sdss[sdsss.index(max(sdsss))][1]],anchor='n')
select_r1.config(text="",state="disabled")
select_r2.config(text="",state="disabled")
else:
number+=1
try:
select_var.set(answer[number])#做过的按原来设置
except:
select_var.set("C")#没做过的留空
if answer[0]=="A":#MBTI
title_l.config(text="MBTI职业性格测试")
back_b.config(state="normal")
text_l.config(text=question[number][0])
select_r1.config(text=question[number][1])#改变控件参数
select_r2.config(text=question[number][2])#改变控件参数
change_schedule(len(answer)-1,28)
elif answer[0]=="B":#SDS
title_l.config(text="霍兰德SDS职业兴趣测试")
back_b.config(state="normal")
text_l.config(text=question[number+28][0])
select_r1.config(text=question[number+28][1])#改变控件参数
select_r2.config(text=question[number+28][2])#改变控件参数
change_schedule(len(answer)-1,60)
select_r1=Radiobutton(root,text=question[number][1],variable=select_var,value="A",command=selection,bg="white",font=('Arial',12),width=80,height=2)
select_r2=Radiobutton(root,text=question[number][2],variable=select_var,value="B",command=selection,bg="white",font=('Arial',12),width=80,height=2)
select_var.set("C")
select_r1.place(relx=0.5, rely=0, x=0, y=455,anchor='n')
select_r2.place(relx=0.5, rely=0, x=0, y=510,anchor='n')
def back():
global number,answer
canvas.place(relx=0.5, rely=0, x=0, y=-270,anchor='n')
if number<=1:
back_b.config(state="disabled")
else:
number-=1
if answer[0]=="A":
text_l.config(text=question[number][0],anchor='center')
select_r1.config(text=question[number][1])#改变控件参数
select_r2.config(text=question[number][2])#改变控件参数
elif answer[0]=="B":
text_l.config(text=question[number+28][0],anchor='center')
select_r1.config(text=question[number+28][1])#改变控件参数
select_r2.config(text=question[number+28][2])#改变控件参数
select_var.set(answer[number])#显示已选选项
def newt():
global number,answer
number=0
answer=""
select_var.set("C")
canvas.place(relx=0.5, rely=0, x=0, y=-270,anchor='n')
title_l.config(text="职业心理测量系统")
text_l.config(text=question[number][0],anchor='center')
select_r1.config(text=question[number][1],state="normal")#改变控件参数
select_r2.config(text=question[number][2],state="normal")#改变控件参数
back_b.config(state="disabled")
change_schedule(0,1)#0%
quit_b=Button(root,text='返回重测',width=10,height=1,command=newt)
quit_b.place(relx=0.5, rely=0, x=375, y=570, anchor='ne')
back_b=Button(root,text='上一题',width=10,height=1,command=back,state="disabled")
back_b.place(relx=0.5, rely=0, x=-375, y=570, anchor='nw')
def change_schedule(now_schedule,all_schedule):
canvas1.coords(fill_rec, (5, 5, 6 + (now_schedule/all_schedule)*400, 25))
x.set(str(round(now_schedule/all_schedule*100,2)) + '%')
frame = Frame(root).place(relx=0.5, rely=0, x=0, y=570,anchor='n')#使用时将框架根据情况选择新的位置
canvas1 = Canvas(frame,width = 400,height = 30,bg = "white")
canvas1.place(relx=0.5, rely=0, x=0, y=570,anchor='n')
x = StringVar()#进度条以及完成程度
out_rec = canvas1.create_rectangle(5,5,400,25,outline = "yellow",width = 1)
fill_rec = canvas1.create_rectangle(5,5,5,25,outline = "",width = 0,fill = "green")
Label(frame,textvariable = x).place(relx=0.5, rely=0, x=230, y=573,anchor='n')
root.mainloop()# 进入消息循环
Python编程真的很简单,语法接近自然语言,各种API都超容易学,哈哈哈。