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

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

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

在这里插入图片描述

1、问题背景

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

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

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

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 声明为全局变量。

以下是修改后的代码:

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 应用程序。在窗口中输入名字并点击提交按钮,程序会显示相应的问候消息。

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值