2011-07-14 74 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