前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python Tkinter创建一个简单的应用程序

使用Python Tkinter创建一个简单的应用程序

原创
作者头像
华科云商小徐
发布2024-08-07 09:53:22
1350
发布2024-08-07 09:53:22
举报
文章被收录于专栏:小徐学爬虫

使用 Python 的 tkinter 模块,你可以创建一个简单的图形用户界面(GUI)应用程序。tkinter 是 Python 标准库的一部分,适合用来开发基本的桌面应用。

以下是一个使用 tkinter 创建简单应用程序的示例。这个应用程序有一个标签、一个文本输入框、一个按钮,以及一个用于显示用户输入内容的标签。

1、问题背景

我想创建一个简单的应用程序来辅助学习。想法如下:

创建一个应用程序,它将仅运行与所选课程(单选按钮)关联的脚本文件。所以我创建了一些列出主题的单选按钮(供点击)。一旦选择了科目,用户必须点击回车键。这将运行所有已选科目的 .py 文件(execute_script 函数)。

但是,当我运行代码时,我会收到 4 个写着“无”的消息框,点击确定后,出现一个只有 Enter 按钮的方形窗口。我该如何解决这个问题?

代码语言:javascript
复制
def check(file_name, relStatus):
    radioValue = relStatus.get()
    tkMessageBox.showinfo('You checked', radioValue)
    been_clicked.append(file_name)
    return
​
def execute_script():
    for name in been_cliked:
        subprocess.Popen(['python', 'C:\Users\Max\Subjects\{}'.format(name)])
​
    yield
​
def main():
    # 创建应用程序
    app = Tk()
    app.title('Coursework')
    app.geometry('450x300+200+200')
​
    # 头部
    labelText = StringVar()
    labelText.set('Select subjects')
​
    # 带有名称的词典
    product_names = {}
    names = []
    file_name = []
    names = ['Math', 'Science', 'English', 'French']
    file_name = ['calc.py', 'physics.py', 'grammar.py', 'livre.py']
    product_names = OrderedDict(zip(names, file_name))
​
    # 创建单选按钮
    global been_clicked
    been_clicked = []
    relStatus = StringVar()
    relStatus.set(None)
    for name, file_name in product_names.iteritems():
        radio1 = Radiobutton(app, text=name, value=name, \
                         variable=relStatus, command=check(file_name, relStatus))
​
    button = Button(app, text='Click Here', width=20, command=execute_script())
    button.pack(side='bottom', padx=15, pady=15)
​
    app.mainloop()
​
​
if __name__ == '__main__': main()

2、解决方案

根据上面提到的问题描述,可以发现:

  • for name in been_cliked 应该为 for name in been_clicked,函数调用多了括号,需要改为 command=check
  • 由于 check 是一个回调函数,需要使用 lambda 表达式将其作为参数传递给 command
  • 需要将 radio1.pack(side='top') 添加到 for 循环中,以便将单选按钮添加到窗口。
  • 同样地,command=execute_script 应该改为 command=execute_script
  • 导入 subprocess 模块。
  • yield 改为 return
  • 在所有函数中,将 been_clicked 声明为全局变量。

以下是修改后的代码:

代码语言:javascript
复制
from subprocess import Popen
from tkinter import *
from tkinter import messagebox
​
app = Tk()
app.title('Coursework')
app.geometry('450x300+200+200')
​
labelText = StringVar()
labelText.set('Select subjects')
​
product_names = {}
names = []
file_name = []
names = ['Math', 'Science', 'English', 'French']
file_name = ['calc.py', 'physics.py', 'grammar.py', 'livre.py']
product_names = OrderedDict(zip(names, file_name))
​
global been_clicked
been_clicked = []
relStatus = StringVar()
relStatus.set(None)
​
def check(file_name, relStatus):
    radioValue = relStatus.get()
    messagebox.showinfo('You checked', radioValue)
    been_clicked.append(file_name)
​
def execute_script():
    for name in been_clicked:
        Popen(['python', 'C:\Users\Max\Subjects\{}'.format(name)])
​
    return
​
for name,file_name in product_names.iteritems():
    radio1 = Radiobutton(app, text=name, value=name, \
                     variable=relStatus, command=lambda: check(file_name, relStatus))
    radio1.pack(side='top')
​
button = Button(app, text='Click Here', width=20, command=execute_script)
button.pack(side='bottom', padx=15, pady=15)
​
app.mainloop()

将以上代码保存为 .py 文件,然后使用 Python 运行即可启动这个简单的 Tkinter 应用程序。在窗口中输入名字并点击提交按钮,程序会显示相应的问候消息。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档