吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1486|回复: 11
收起左侧

[求助] 【python】ttkbootstrap的窗口关闭事件问题

[复制链接]
yang4384 发表于 2023-1-9 09:47
想给窗口关闭的时候弹出确认取消的消息框,在外边能运行但是放窗口关闭函数里就不行了  有大佬帮忙看看吗

报了这个 RuntimeError: Calling Tcl from different apartment

[Python] 纯文本查看 复制代码
import ttkbootstrap as ttk
from ttkbootstrap.dialogs import Messagebox
import threading

class TestGui:
    def __init__(self, root_window):
        self.root_windows = root_window
        self.root_windows.title("11111111")
        self.root_windows.geometry("380x285")
        self.root_windows.protocol('WM_DELETE_WINDOW', lambda: self.thread_it(self.clos_window))
        # Messagebox.okcancel(message="确定取消") 正常弹窗



    def clos_window(self):
        Messagebox.okcancel(message="确定取消")  #这就报错了  用self方法也是
        # 还没加入判断 只是测试消息框




    def thread_it(self, func, *args):
        self.myThread = threading.Thread(target=func, args=args)
        self.myThread .setDaemon(True)
        self.myThread .start()

if __name__ == '__main__':
    root_window = ttk.Window()
    root_window.attributes("-topmost", 1)
    root_window.resizable(width=False, height=False)
    test_gui = TestGui(root_window)
    root_window.mainloop()

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

QingTianGG 发表于 2023-1-9 11:02
[Python] 纯文本查看 复制代码
self.root_windows.protocol("WM_DELETE_WINDOW", lambda arg=self.root_windows: self.clos_window(arg))

    def clos_window(self, master):
        Messagebox.okcancel(message="确定取消")

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
yang4384 + 1 + 1 我很赞同!

查看全部评分

 楼主| yang4384 发表于 2023-1-9 11:09
QingTianGG 发表于 2023-1-9 11:02
[mw_shl_code=python,true]self.root_windows.protocol("WM_DELETE_WINDOW", lambda arg=self.root_windows ...

可以了 可以了 谢谢大佬 可以告诉我咋回事吗   这代码是我在没用ttkbootstrap之前的程序里拿出来的,用了ttkbootstrap之后不知道啥情况  开发文档也没看明白
QingTianGG 发表于 2023-1-9 11:13
yang4384 发表于 2023-1-9 11:09
可以了 可以了 谢谢大佬 可以告诉我咋回事吗   这代码是我在没用ttkbootstrap之前的程序里拿出来的,用了 ...

https://www.pythonheidong.com/blog/article/657599/d3d5319f0fedc05bcce4/

我是参考了这个的代码,我也没弄明白
 楼主| yang4384 发表于 2023-1-9 13:09
QingTianGG 发表于 2023-1-9 11:13
https://www.pythonheidong.com/blog/article/657599/d3d5319f0fedc05bcce4/

我是参考了这个的代码{:3 ...

能用是能用了 但是现在我的多线程没用了
xilidexiao 发表于 2023-1-9 14:08
[Python] 纯文本查看 复制代码
import ttkbootstrap as ttk
from ttkbootstrap.dialogs import Messagebox


class TestGui:
    def __init__(self, root_window):
        self.root_windows = root_window
        self.root_windows.title("11111111")
        self.root_windows.geometry("380x285")
        self.root_windows.protocol("WM_DELETE_WINDOW", self.close_windows)

    def close_windows(self):
        result = Messagebox.okcancel("确认退出吗?", "提示")
        print(result)
        if result == "确定":
            self.root_windows.destroy()


if __name__ == '__main__':
    root_window = ttk.Window()
    root_window.attributes("-topmost", 1)
    root_window.resizable(width=False, height=False)
    test_gui = TestGui(root_window)
    root_window.mainloop()
 楼主| yang4384 发表于 2023-1-9 14:47
xilidexiao 发表于 2023-1-9 14:08
[mw_shl_code=python,true]import ttkbootstrap as ttk
from ttkbootstrap.dialogs import Messagebox

可是这样我的多线程就没了哎 我测试过其实是可以正常调用函数的  但运行到 Messagebox就不行了

 楼主| yang4384 发表于 2023-1-9 14:49
测试了一下 其实能调用def函数,但是一运行messgbox就不行了  不知道是不是我在def里的写法有问题
xilidexiao 发表于 2023-1-9 15:11
yang4384 发表于 2023-1-9 14:47
可是这样我的多线程就没了哎 我测试过其实是可以正常调用函数的  但运行到 Messagebox就不行了

tkinter界面单线程占用的 用不了多线程
 楼主| yang4384 发表于 2023-1-9 15:19
xilidexiao 发表于 2023-1-9 15:11
tkinter界面单线程占用的 用不了多线程

那为啥我没装ttkbootstrap之前 用默认的tk可以  我复制原来的代码过来的  只是觉得界面太丑换一下第三方主题
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-11 17:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表