【问题标题】:GUI program with toggable console?带有可切换控制台的 GUI 程序?
【发布时间】:2013-01-30 19:37:17
【问题描述】:

我见过一些应用程序允许您在需要阅读日志消息时显示/隐藏控制台。例如 Blender3D 允许这样做 (blender.org)。

我想知道这是否可以在 Python 中完成以及如何完成。

我的主窗口是 Panda3D (panda3d.org) 窗口。 我在某处读到一个选项是隐藏“真实”控制台(pythonw)并创建另一个控制台,并且每次您想“显示”“真实”控制台时将所有内容从“真实”控制台重定向到它。不知道如何做到这一点。

或者至少是一种通过读取配置文件或其他方式来选择是否使用控制台启动程序。

【问题讨论】:

  • 我不确定我是否理解您的第三段。您可以轻松地创建一个只有滚动条和文本区域的类似控制台的窗口,并且您可以,例如将sys.stdout 重定向到附加到该窗口的某个对象,并随时隐藏和显示该窗口。那是你要找的吗?如果是这样,您需要帮助的哪一部分?
  • 我想要的“控制台式”窗口或控制台窗口?说起来很简单,让我看看代码有多简单?
  • 我故意说一个“类似控制台的窗口”。如果您需要它成为一个实际的控制台窗口,那么创建第二个您可以隐藏和显示的窗口并不比隐藏和显示您开始使用的那个更简单(除非您需要 Win9x 兼容性……您不需要),所以没有理由创建第二个。那么,它真的必须一个控制台窗口,还是一个看起来和行为都像控制台窗口的普通 GUI 窗口就足够了?
  • 如果您确实需要它是一个实际的控制台窗口,请记住,一个进程一次只能有一个控制台。 (当然,您可以使用不同的控制台创建一个子进程。或者释放您的原始控制台并分配一个新控制台。当您在 cmd.exe 或其他进程共享下的 python.exe 中运行时,这会很有帮助同一个控制台,但我看不出它对你有什么帮助。)

标签: python console terminal pythonw


【解决方案1】:

我假设您在谈论 Windows,因为 Blender 中的这个控制台切换是 Windows 独有的。我猜 Blender 在 Windows 上使用 GetConsoleWindowShowWindow

这就是你在 python 中使用pywin32 的方法:

import win32gui, win32console, win32api, win32con
import time

console_window = win32console.GetConsoleWindow()
time.sleep(1)
win32gui.ShowWindow(console_window, win32con.SW_HIDE)
time.sleep(1)
win32gui.ShowWindow(console_window, win32con.SW_SHOW)
time.sleep(1)

如果你用python而不是pythonw运行这个程序,它会显示控制台,休眠一秒钟,隐藏控制台,再休眠一秒钟,然后再次隐藏。

请注意,此代码仅适用于 Windows。在其他平台上,不需要像这样愚蠢的东西,因为如果您希望程序显示控制台,那么您可以从控制台运行它。

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多