You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy程序经Nuitka编译为EXE后窗口缩放禁用失效求助

解决Kivy应用经Nuitka编译后仍可缩放窗口的问题

针对你遇到的Kivy应用在代码和ini配置禁用缩放,但Nuitka编译为exe后仍能缩放的问题,可以从以下几个方向排查和解决:

1. 修正Kivy配置的加载顺序与生效逻辑

Kivy的配置设置需要在App初始化前完成,且需确保配置被正确写入,避免被后续加载的内容覆盖。调整代码顺序如下:

# 优先加载并配置Kivy核心参数
from kivy.config import Config
# 全局禁用窗口缩放,设置固定尺寸
Config.set('graphics', 'resizable', 0)
Config.set('graphics', 'width', 500)
Config.set('graphics', 'height', 700)
Config.write()  # 将配置写入本地,确保运行时生效

# 再导入其他Kivy模块
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
# ...其余导入内容

os.chdir(os.path.dirname(__file__)) 
_local_dir = os.path.dirname(os.path.realpath(__file__))

Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
Builder.load_file(_local_dir + '/kivy.kv')

# 再次确认窗口属性,防止被kv文件或其他逻辑覆盖
Window.resizable = False
Window.size = (500, 700)

2. 检查kv文件是否存在冲突配置

打开你的kivy.kv文件,确认是否存在覆盖窗口属性的代码,比如:

Window:
    resizable: True

如果有这类配置,直接删除或改为resizable: False。

3. Nuitka编译时打包自定义配置文件

默认情况下,Nuitka可能不会自动打包你的kivy.ini,导致exe运行时加载系统默认配置。编译时添加参数指定打包配置文件:

nuitka --standalone --onefile --include-data-file=kivy.ini=. your_app.py

此命令会将当前目录的kivy.ini打包到exe同目录,确保程序运行时加载自定义配置。

4. 用Windows API直接锁定窗口样式(兜底方案)

如果以上方法仍无效,可通过ctypes调用Windows系统API,直接禁用窗口的最大化按钮和调整大小功能,绕过Kivy的封装限制:

在你的App类的build方法末尾添加以下代码:

class YourApp(App):
    def build(self):
        # ...你的原有build逻辑
        root = Builder.load_file(_local_dir + '/kivy.kv')
        
        # 调用Windows API锁定窗口
        import ctypes
        hwnd = Window.get_window_info().window_handle
        GWL_STYLE = -16
        WS_MAXIMIZEBOX = 0x00010000  # 最大化按钮样式
        WS_THICKFRAME = 0x00040000   # 可调整边框样式
        
        current_style = ctypes.windll.user32.GetWindowLongW(hwnd, GWL_STYLE)
        # 移除最大化和可调整样式
        new_style = current_style & ~WS_MAXIMIZEBOX & ~WS_THICKFRAME
        ctypes.windll.user32.SetWindowLongW(hwnd, GWL_STYLE, new_style)
        # 刷新窗口样式生效
        ctypes.windll.user32.SetWindowPos(hwnd, 0, 0, 0, 0, 0, 0x0001 | 0x0002 | 0x0004 | 0x0010)
        
        return root

内容的提问来源于stack exchange,提问作者Brandon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:13:20