我試圖將一個Win32應用程序移植到使用pyqt的Python中,但我似乎無法獲得一個帶有文本標籤和編輯字段的簡單窗口,例如以下簡單的Win32風格(基本上WS_EX_CLIENTEDGE):pyqt類似於Win32風格的窗口
我打了setFrameStyle(即使用不同的風格和凹陷 - 然後一個很好的措施的所有其他合理的組合)的兩個小部件和使用setContentsMargins()爲零,以讓它來填充所有的空間,但是qt窗口在邊界方面看起來仍然很不一樣。
我試圖將一個Win32應用程序移植到使用pyqt的Python中,但我似乎無法獲得一個帶有文本標籤和編輯字段的簡單窗口,例如以下簡單的Win32風格(基本上WS_EX_CLIENTEDGE):pyqt類似於Win32風格的窗口
我打了setFrameStyle(即使用不同的風格和凹陷 - 然後一個很好的措施的所有其他合理的組合)的兩個小部件和使用setContentsMargins()爲零,以讓它來填充所有的空間,但是qt窗口在邊界方面看起來仍然很不一樣。
我得到非常接近具有以下(使用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以外的其他東西。
您可能沒有使用正確的樣式。看看the documentation for QStyle。
你可能看着這已經但是你看Python的'win32gui'模塊 - 這是[Python的Win32的擴展名]的一部分(http://python.net /crew/mhammond/win32/Downloads.html)?這可能允許您將應用程序更貼近您的預期。 PyQt是自定義控件,所以我希望你可以接近你想要的東西,但你可能永遠不會匹配你想要的。 – Raceyman
感謝您的建議,我研究了一些不同的GUI框架,但我使用的是Python3,並且這個限制範圍相當大,pyqt似乎是最好的選擇 - 我玩了一會兒,看起來有點類似,如果你看不是太多,所以它現在必須做。 – Voo