2011-07-14 43 views
2

我试图将一个Win32应用程序移植到使用pyqt的Python中,但我似乎无法获得一个带有文本标签和编辑字段的简单窗口,例如以下简单的Win32风格(基本上WS_EX_CLIENTEDGE):pyqt类似于Win32风格的窗口

Example

我打了setFrameStyle(即使用不同的风格和凹陷 - 然后一个很好的措施的所有其他合理的组合)的两个小部件和使用setContentsMargins()为零,以让它来填充所有的空间,但是qt窗口在边界方面看起来仍然很不一样。

+1

你可能看着这已经但是你看Python的'win32gui'模块 - 这是[Python的Win32的扩展名]的一部分(http://python.net /crew/mhammond/win32/Downloads.html)?这可能允许您将应用程序更贴近您的预期。 PyQt是自定义控件,所以我希望你可以接近你想要的东西,但你可能永远不会匹配你想要的。 – Raceyman

+0

感谢您的建议,我研究了一些不同的GUI框架,但我使用的是Python3,并且这个限制范围相当大,pyqt似乎是最好的选择 - 我玩了一会儿,看起来有点类似,如果你看不是太多,所以它现在必须做。 – Voo

回答

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