python 线程关闭tkinter_从菜单栏退出Tkinter应用程序不能杀死线程

在Python tkinter应用中,一个长期运行的后台线程在通过菜单栏退出时不会被终止。文章描述了使用Event对象来停止线程的方法,但当通过Ctrl+Q或程序菜单退出时,`kill_all_threads`函数未被调用,导致线程无法正常关闭。作者寻求解决方案来确保在不手动关闭窗口的情况下也能结束线程。
摘要由CSDN通过智能技术生成

我有一个带有tkintergui的Python应用程序。在应用程序中,用户调用一个长期运行的后台进程(从Python的threading模块实现为Thread)。如果我在程序完成之前退出程序,就无法终止后台线程。如果我通过关闭根窗口上角的“X”退出应用程序,我的代码可以工作,但如果我从顶级菜单栏退出(即Python>quit或Ctrl+Q),则代码不起作用。。因为大多数应用程序都使用后者,所以我真的希望能够实现这一点。在

现在,我用如下代码杀死后台线程:class BackgroundCallFrame(Frame):

def __init__(self, parent):

Frame.__init__(self, parent)

self.background_call = BackgroundCall()

self.background_call.start()

class BackgroundCall(threading.Thread):

def __init__(self):

threading.Thread.__init__(self)

self._stop_req = threading.Event()

def run(self):

for i in range(1,100000):

if self._stop_req.is_set():

return

else:

# do stuff

def stop(self):

self._stop_req.set();

def main():

def kill_all_threads():

if child.background_

Python中使用Tkinter库创建顶部菜单栏(也称为工具栏或标题栏)时,可以使用`ttk`模块提供的`Menubutton`和`Menu`功能。以下是一个简单的例子,展示如何创建带有不同样式的顶部菜单栏: 首先,确保已安装`ttk`模块,如果没有,请运行`pip install tkinter ttk`。 ```python import tkinter as tk from tkinter import ttk # 创建窗口 root = tk.Tk() root.title("Top Menu Bar Example") # 设置窗口图标(可选) root.iconbitmap('your_icon.ico') # 创建顶级菜单栏 top_menu_bar = ttk.Menu(root) # 添加子菜单 file_menu = ttk.Menu(top_menu_bar, tearoff=0) # tearoff=0表示不提供下拉箭头 file_menu.add_command(label="New", command=lambda: print("New")) file_menu.add_command(label="Open", command=lambda: print("Open")) top_menu_bar.add_cascade(label="File", menu=file_menu) edit_menu = ttk.Menu(top_menu_bar, tearoff=0) edit_menu.add_command(label="Cut", command=lambda: print("Cut")) edit_menu.add_command(label="Copy", command=lambda: print("Copy")) top_menu_bar.add_cascade(label="Edit", menu=edit_menu) # 将菜单添加到窗口顶部 top_menu_bar.config(font=("Arial", 12)) # 设置字体样式 top_menu_bar.pack(side=tk.TOP, fill=tk.X) # 主循环 root.mainloop() ``` 在这个例子中,我们创建了一个包含两个子菜单("File" 和 "Edit")的顶部菜单栏。每个子菜单都有命令(这里只是打印一条消息),并通过`config`设置全局字体样式。`pack`方法用于将菜单栏放在窗口顶部,并水平扩展。 要改变样式,你可以调整`font`属性中的颜色、大小等,还可以尝试其他`ttk`组件的样式选项,如`style`变量。具体风格可能依赖于你的主题配置。记得替换`'your_icon.ico'`为实际的图标文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值