类似Win32风格的pyqt窗口

2 投票
2 回答
1351 浏览
提问于 2025-04-16 21:33

我正在尝试把一个Win32应用程序移植到Python上,使用pyqt来做图形界面,但我就是无法搞出一个简单的窗口,里面有一个文本标签和一个编辑框,就像下面这个简单的Win32风格的窗口(基本上是WS_EX_CLIENTEDGE样式):

示例

我试着调整了setFrameStyle(也就是使用不同的样式和凹陷效果,然后为了保险起见还试了其他合理的组合),并把setContentsMargins()设置为零,以便让它填满所有空间,但qt窗口的边框看起来还是和我想要的差别很大。

2 个回答

0

你可能没有使用正确的样式。可以看看QStyle的文档

1

我用以下方法差不多能做到(使用 QtGui.QFrame.WinPanel):

import sys
from PySide import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):
        label = QtGui.QLabel("Test")
        label.setAlignment(QtCore.Qt.AlignCenter)
        label.setFrameStyle(QtGui.QFrame.WinPanel | QtGui.QFrame.Sunken)

        edit = QtGui.QTextEdit()
        edit.setFrameStyle(QtGui.QFrame.WinPanel | QtGui.QFrame.Sunken)
        edit.setText("Some text")
        edit.moveCursor(QtGui.QTextCursor.MoveOperation.End)

        vbox = QtGui.QVBoxLayout()
        vbox.setContentsMargins(1, 1, 1, 1)
        vbox.setSpacing(1)
        vbox.addWidget(label)
        vbox.addWidget(edit)

        self.setLayout(vbox)

        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('Window Title')
        self.show()

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

QFrame 的文档对不同的框架样式有很好的介绍。

如果你想要的效果比 setFrameStyle 提供的更进一步,你就需要自己绘制小部件或面板,或者使用其他的工具,而不是 QT。

wxPython

pywin32

撰写回答