【问题标题】:Implement custom frame border UI instead of standard UI实现自定义框架边框 UI 而不是标准 UI
【发布时间】:2015-11-19 08:39:19
【问题描述】:

我正在使用 PyQt4 开发我的 Python 应用程序,我想在窗口中自定义我的应用程序界面(QMainWindow、QLineEdit 等),例如 这个观点(或其他):

取而代之的是(Windows 10 上的默认样式):

【问题讨论】:

  • 你了解 QSS 样式表吗?此外,您可以更具体地了解您想要的装饰品。可能并非一切皆有可能(尤其是窗框)。
  • 你不能改变现有标题栏的外观(除了显示/隐藏按钮),因为它是由窗口管理器控制的。
  • @ekhumoro 那么电报桌面开发人员如何使用 qt 做到这一点? github.com/telegramdesktop/tdesktop
  • @Trilarion 有一些与 QSS 捆绑和限制的风格,但是对于像我提到的第一个完全不同的风格呢?
  • 他们没有:you can't change the appearance of the titlebar that is provided by the window manager。唯一的解决方法是隐藏现有的标题栏并添加一个假标题栏,like this

标签: user-interface pyqt


【解决方案1】:

对于除窗口框架边框之外的所有样式,请使用 Qt 样式表 (QSS) (Documentation)。

对于框架边框来说有点困难:

查看 Qt window flags example 以了解 Qt 可以对窗口框架做什么。

基本上,您无法设置窗口框架的样式(它们采用操作系统的样式),但您可以隐藏/显示按钮,并且可以完全无框架地显示窗口。

然而,在 Windows 上,有些人侵入了 Windows 框架栏 (Tabs in title bar: what's the secret?)。这也可能与 Python 相关。

最通用的方法是(尽管这有点贵)不使用任何操作系统提供的框架(Qt::CustomizeWindowHint),然后在内部实现您自己的样式框架,实现标题栏和边框的拖放等.

有了这个,您可以轻松地实现包括您的示例在内的所有可能的框架边框,但是您必须重新实现按钮和拖动行为,并且响应可能比平时慢一些。此外,外观和感觉不会像 Qt 自己的框架边框那样是开箱即用的操作系统特定的。

例如,在 Linux 中,标题栏在最大化时通常会以不同的方式显示 - 你不会有这个。

定制框架条示例:Customize title bar and window

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多