本项目实现的功能是使用Python的tkinter设计一个yh选项选择APP,并在代码里将陷阱选项和普通选项融合,设计一个有趣又实用的简易版APP,代码部分实现的是需要安装所需要的库才能运行的代码,可以将代码打包成.exe文件,这样就不需要安装库,在任何电脑上都可以运行。想要代码的可以在最后的github网址上下载或者有什么问题都可以私信我哦!
整体实现的功能讲述:
这段代码使用Python的Tkinter库创建了一个交互式问答界面,设计了一系列问题和选项供用户通过单选按钮进行选择。程序的主要目的是根据用户的回答生成一个个性化的日程规划。
import tkinter as tk # 创建主窗口 root = tk.Tk() root.title("❥(^_-)") root.geometry("500x400") # 设置窗口大小 # 定义问题和选项的数据结构 questions = [ { "question": "可爱的某某,美好的一天要开始了哦٩(๑^o^๑)۶!!!", #0 "options": [tk.PhotoImage(file="2.png")] }, { "question": "早上几点出发呀?(有本事你选10:00试试(手动狗头))", "options": ["8:00", "9:00", "10:00"] }, { "question": "什么?你还真选10:00?给你一个重新选择的机会!(你还敢选10:00嘛)", "options": ["8:00", "9:00", "10:00"] }, { "question": "什么?你还选10:00?看我把10:00这个选项删除了看你怎么选略略略", "options": ["8:00", "9:00"] }, { "question": "8:00当然是有点早得嘞,怎么会有8:00这个选项呢", "options": ["9:00"] }, { "question": "8:00当然是有点早得嘞,怎么会有8:00这个选项呢", #5 "options": ["9:00", "10:00"] }, { "question": "上午想去看千渡长江美术馆吗", "options": ["想", "特别想", "超级想"] }, { "question": "为中午的带鱼选择一家饭店吧", "options": [tk.PhotoImage(file="3.png"), "大众点评第一名", "其实上面两个选项是同一家店啦"] #7 }, { "question": "下午想先唱歌还是想先看电影呢(温馨提示:电影时间(两个小时)有13:40,14:40,16:00,17:00)", "options": ["先看电影", "先唱歌"] }, { "question": "下午看什么电影呢?", "options": ["没得选,只能选前任四哦"] }, { "question": "晚上去哪吃饭然后干嘛呢?", "options": ["不知道,要不到时再说吧"] #10 }, { "question": "美好的一天结束了!!!(手动撒花 累der)", "options": [tk.PhotoImage(file="1.png")] }, { "question": "什么?你还真选10:00?给你一个重新选择的机会!(你还敢选10:00嘛)", #12 "options": ["9:00", "10:00"] }, { "question": "什么?你还选10:00?看我把10:00这个选项也删除了看你怎么选略略略", "options": ["9:00"] }, # 添加更多问题和选项 ] # 答案列表 answers = [] a = [] # 创建问题和选项的Label question_label = tk.Label(root, text=questions[len(answers)]["question"]) question_label.pack() # 创建Radio按钮 selected_option = tk.StringVar() selected_option.set(None)
这段代码是使用Python的Tkinter库创建一个简单的GUI应用程序,主要用于呈现一系列预设的问题和选项供用户进行选择。程序中定义了一个列表`questions`,其中每个元素都是一个字典,包含两个键值对:"question"(问题文本)和"options"(问题对应的选项,可以是字符串或图片)。部分问题的选项中还包含了趣味性的互动提示。
在GUI界面初始化时,首先创建了主窗口,并设置了窗口标题和大小。然后定义了一个空的答案列表`answers`用于后续存储用户的答案。
接着,从`questions`列表中取出第一个问题的文本,并用Tkinter的`Label`控件显示在窗口上。同时,定义了一个`StringVar`类型的变量`selected_option`来跟踪用户当前选中的选项。
def select_option(option): global flag, flag1 option = str(option) if option != "pyimage1" and option != "pyimage6": print(option) print(type(option)) if option == "pyimage1": root.geometry("500x100") # 设置窗口大小 question_label.config(text=questions[1]["question"]) selected_option.set(None) create_radio_buttons(questions[1]["options"]) flag = 1 flag1 = 1 elif option == "10:00" and flag == 1 and flag1 == 1: question_label.config(text=questions[2]["question"]) selected_option.set(None) create_radio_buttons(questions[2]["options"]) flag = flag + 1 a.append(1) elif option == "10:00" and flag == 2 and flag1 == 1: question_label.config(text=questions[3]["question"]) selected_option.set(None) create_radio_buttons(questions[3]["options"]) flag = flag + 1 a.append(2) elif option == "10:00" and flag == 1 and flag1 == 0: question_label.config(text=questions[12]["question"]) selected_option.set(None) create_radio_buttons(questions[12]["options"]) flag = flag + 1 a.append(3) elif option == "10:00" and flag == 2 and flag1 == 0: question_label.config(text=questions[13]["question"]) selected_option.set(None) create_radio_buttons(questions[13]["options"]) flag = flag + 1 a.append(4) elif option == "8:00" and flag == 3: question_label.config(text=questions[4]["question"]) selected_option.set(None) create_radio_buttons(questions[4]["options"]) a.append(5) elif option == "8:00" and flag == 1: question_label.config(text=questions[5]["question"]) selected_option.set(None) create_radio_buttons(questions[5]["options"]) flag1 = 0 a.append(6) elif option == "9:00": question_label.config(text=questions[6]["question"]) selected_option.set(None) create_radio_buttons(questions[6]["options"]) elif option == "想" or option == "特别想" or option == "超级想": root.geometry("500x400") # 设置窗口大小 question_label.config(text=questions[7]["question"]) selected_option.set(None) create_radio_buttonsimagegai(questions[7]["options"]) elif option == "pyimage2" or option == "大众点评第一名" or option == "其实上面两个选项是同一家店啦": root.geometry("500x100") # 设置窗口大小 question_label.config(text=questions[8]["question"]) selected_option.set(None) create_radio_buttons(questions[8]["options"]) elif option == "先看电影" or option == "先唱歌": answers.append(option) if option == "先看电影": answers.append("唱歌") else: answers.append("看电影") question_label.config(text=questions[9]["question"]) selected_option.set(None) create_radio_buttons(questions[9]["options"]) elif option == "没得选,只能选前任四哦": question_label.config(text=questions[10]["question"]) selected_option.set(None) create_radio_buttons(questions[10]["options"]) elif option == "不知道,要不到时再说吧": root.geometry("500x400") # 设置窗口大小 question_label.config(text=questions[11]["question"]) selected_option.set(None) create_radio_buttonsimage(questions[11]["options"]) else: generate_word_button.pack()
这段代码定义了一个名为 `select_option` 的函数,其功能是根据用户选择的不同选项动态更新一个问卷或对话式应用程序的界面。该程序使用了Tkinter库构建GUI窗口,并且依赖于全局变量 `flag` 和 `flag1` 以及一个列表 `a` 来追踪当前的问题索引和用户的回答路径。
当用户从一系列选项中选择一个后(可能是通过点击按钮、单选按钮等),`select_option` 函数被调用并接收用户所选的 `option` 参数。根据 `option` 的值,函数会执行不同的逻辑分支来切换到下一个问题或展示新的选项集。同时,它还负责调整窗口大小及更新问题标签(question_label)的内容,并调用 `create_radio_buttons` 函数重新生成一组单选按钮作为新问题的答案选项。
# 创建Radio按钮 radio_buttons = [] def create_radio_buttons(options): for radio_button in radio_buttons: radio_button.destroy() radio_buttons.clear() for option in options: radio_button = tk.Radiobutton(root, text=option, variable=selected_option, value=option, command=lambda option=option: select_option(option)) radio_buttons.append(radio_button) radio_button.pack()
这段代码是用于在Tkinter GUI框架中创建一组单选按钮(Radio Buttons)的。它首先定义了一个空列表`radio_buttons`,用于存储生成的单选按钮对象。
函数`create_radio_buttons(options)`接收一个参数`options`,这应该是一个包含多个选项的列表。在函数内部:
1. 首先遍历并销毁之前可能存在的所有单选按钮(通过调用`destroy()`方法),这样在每次调用此函数时都会清除并重新创建单选按钮,避免界面中出现重复按钮。
2. 然后,使用`radio_buttons.clear()`清空列表,确保列表中不再保存任何旧的单选按钮引用。
3. 接下来,对于`options`列表中的每一个选项,创建一个新的Tkinter Radiobutton对象,并设置其属性:文本内容为当前选项,绑定变量为`selected_option`以便跟踪选中的值,点击时触发的命令为`select_option(option)`,其中`option`作为参数传递给回调函数;然后将新创建的单选按钮对象添加到`radio_buttons`列表中。
4. 最后,使用`pack()`方法将每个新创建的单选按钮布局在GUI窗口中。
总之,这段代码的主要作用是在 Tkinter 应用程序中动态生成并显示与输入选项列表相对应的一组单选按钮,同时提供相应的事件处理机制来响应用户的选项选择。
def create_radio_buttonsimage(options): for radio_button in radio_buttons: radio_button.destroy() radio_buttons.clear() for option in options: radio_button = tk.Radiobutton(root, image=option, variable=selected_option, value=option, command=lambda option=option: select_option(option)) radio_buttons.append(radio_button) radio_button.pack()
这段代码与之前提供的那段代码非常相似,但有一个关键的不同之处:它适用于创建一组基于图像(而非文本)的单选按钮。该函数`create_radio_buttonsimage(options)`同样用于Tkinter GUI编程环境。
1. 函数首先遍历并销毁列表`radio_buttons`中先前存在的所有单选按钮,确保在重新生成时不会出现重复或残留的UI元素。
2. 随后,通过调用`radio_buttons.clear()`清空列表,移除旧的单选按钮对象引用。
3. 对于`options`参数中提供的每个选项,这里假设每个选项是一个表示图像资源的对象或路径。函数创建一个新的Tkinter Radiobutton,但这次使用的是`image`参数来设置单选按钮显示的图片,而不是文本内容。变量`selected_option`依然用来跟踪用户的选择,而命令部分仍然采用lambda表达式绑定一个回调函数`select_option(option)`,以便当用户点击单选按钮时触发相应的事件处理。
4. 新创建的基于图像的单选按钮被添加到`radio_buttons`列表中,并通过`pack()`方法布局在GUI窗口上。
总之,这段代码的作用是在Tkinter应用程序中根据输入的图像资源列表动态生成并展示一组图像单选按钮,允许用户通过点击不同的图片进行选择,并提供了一个回调机制来响应用户的选项变更。
def create_radio_buttonsimagegai(options): global flaggai flaggai = 1 for radio_button in radio_buttons: radio_button.destroy() radio_buttons.clear() for option in options: if flaggai == 1: radio_button = tk.Radiobutton(root, image=option, variable=selected_option, value=option, command=lambda option=option: select_option(option)) radio_buttons.append(radio_button) radio_button.pack() flaggai = flaggai - 1 elif flaggai == 0: radio_button = tk.Radiobutton(root, text=option, variable=selected_option, value=option, command=lambda option=option: select_option(option)) radio_buttons.append(radio_button) radio_button.pack() # 初始化第一个问题的单选按钮 create_radio_buttonsimage(questions[len(answers)]["options"])
这段代码的作用是创建一组单选按钮,用于显示和选择给定的选项列表。根据flaggai
的值(0或1),单选按钮可以显示为图像或者文本。
首先,定义一个全局变量 flaggai
并初始化为 1。然后,遍历并销毁之前创建的所有单选按钮,并清空 radio_buttons
列表以准备重新创建新的单选按钮组。
接下来,对于传入的 options
中的每一个选项:
如果 flaggai
等于 1,则创建一个基于图像的单选按钮。使用 Tkinter 的 Radiobutton 类,将图像、变量(selected_option)、值以及点击时触发的命令(select_option)进行配置。创建好的单选按钮会被添加到 radio_buttons
列表中,并通过 pack() 方法布局在窗口上。之后,将 flaggai
减 1。
如果 flaggai
等于 0,则创建一个基于文本的单选按钮,其配置方式与基于图像的单选按钮类似,只是显示的内容由选项文本代替图像。
最后,调用 create_radio_buttonsimage(questions[len(answers)]["options"])
来根据问题答案列表长度索引获取当前问题的选项,并初始化第一个问题的单选按钮组。
def generate_word(): root.geometry("500x120") # 设置窗口大小 longtext = f""" *美好的一天开始了(^o^)(消声烟花) 早上9:00到八道门打车去千渡长江美术博物馆,到了约为9:30左右,参观两个小时左右(^o^) 去菜园小馆吃带鱼,吃完大约2:00(^o^) 下午{answers[0]}两个小时,然后去{answers[1]}两个小时(^o^) 晚上干什么呢?相声?台球?吃提拉米苏?逛街?犹豫犹豫,待定吧(^o^) *美好的一天结束了,累der但是有意义(^o^)(手动撒花) """ question_label.config(text=longtext) generate_word_button = tk.Button(root, text="生成为某某准备的出行规划", command=generate_word) root.mainloop()
这段代码是使用Python的Tkinter库创建一个简单的GUI(图形用户界面)程序,该程序设计为生成并展示一份出行规划。具体来说:
1. `root.geometry("500x120")` 设置了主窗口的大小为宽度500像素、高度120像素。
2. `longtext` 变量是一个多行字符串,用于存储一天的行程规划。其中包含了动态内容,即`answers[0]`和`answers[1]`,这两个变量在实际运行时应包含具体的活动信息。
3. `question_label.config(text=longtext)` 会将`longtext`中的文本内容设置到名为`question_label`的标签组件上显示。
4. `generate_word_button = tk.Button(root, text="生成为某某准备的出行规划", command=generate_word)` 创建了一个按钮,其文本为“生成为某某准备的出行规划”,点击这个按钮时会触发`generate_word`函数。
5. 最后,`root.mainloop()` 启动Tkinter程序的主循环,使得窗口能够持续显示并响应用户的交互事件,如点击按钮等。
最后,你可以使用pyinstaller 代码.py命令将整个代码打包成.exe可执行文件,就做完整个APP了。如果喜欢的觉得博主写的还不错的可以给博主点个赞哦!