如何在 tkinter 应用程序执行期间禁用“D_Lib”信息/警告消息?

问题描述 投票:0回答:2

我正在使用

PyCharm 2017.1.2 Community Edition
开发一个 python tkinter 应用程序,并使用
pyinstaller 3.2.1
打包 SW。

在应用程序运行时,有时(尚未找到根本原因事件)我会将此信息/警告消息发送到运行控制台中。

D_Lib: debug printing for files [.*] and level [100] is turned on
D_Lib: debug printing for files [.*] and level [200] is turned on
D_Lib: debug printing for files [.*] and level [300] is turned on
17004:vf_shex.cpp(84): INFO: DllCanUnloadNow returned S_OK.

这可以在

PyCharm
控制台(在调试和运行模式下)以及在 Windows cmd shell 执行
pyinstaller
exe 文件时看到。

如何删除/禁用这些线?

编辑

我已经阅读了 调用 QtGui.QFileDialog.getExistingDirectory 时的错误帖子 - 它将 ViewFinity 代理软件安装识别为更改默认对话框行为的主要嫌疑人。虽然 ViewFinity 代理确实安装在我的机器上,但我无法删除它(IT 限制)。

有没有办法在

Qt
中禁用本机对话框的使用(如另一篇关于
tkinter
的文章中所建议的)? (我找不到这样的)

python windows python-3.x tkinter pyinstaller
2个回答
0
投票

我猜您正在使用

Tkinter
打开文件?根据这个这个问题
Tkinter
将本机使用系统的文件对话框(如果可用):

当操作系统上有本机文件对话框时,

tk_getSaveFile
使用它们(例如,
GetSaveFileName
在 Windows 上使用)。可以在那里添加小部件,但不能不篡改 Tk 的 C 源代码。

但是

Viewfinity
根据这个问题改变了这些本机文件对话框。

除非您能想出一些其他方式来访问应用程序中不通过

Tkinter
tkFileDialog
的文件,否则当应用程序在系统中运行时,您将无法在系统上看到这些信息/警告消息。


0
投票

我知道这是一个老问题,但该错误尚未在

Viewfinity
的本地版本中修复。这是我的旁路:

import os
import sys

def main(*args):
    """Main process"""
    <Code goes here>

if __name__ == '__main__':
    if '-run' not in sys.argv[1:]:
        os.system('{} "{}" -run {} 2> nul'.format(sys.executable, os.path.abspath(__file__), ' '.join(sys.argv[1:])))
        sys.exit()
    main()
    sys.exit()

它的作用是在初始运行时,

-run
不在命令行参数中,因此参数被传递给
os.system()
语句(运行
exec()
的另一种方式,看起来更稳定,并允许用户提供python 版本直接通过
sys.executable
传递)。

警告:

  1. 这会将 all 错误消息重定向到

    nul
    (即 no 错误消息打印到命令行)。仅当您使用其他打印错误消息的方法(例如使用日志记录模块)时,才应使用此旁路。

  2. 单引号必须在外面(与句子的 PEP 标准相反),因为命令行需要在文件名两边加上双引号(在 python 文件路径两边加上引号,以防文件名中有空格)。

© www.soinside.com 2019 - 2024. All rights reserved.