我正在學習Qt以及如何使用python創建GUI。 我設法創建我自己的Qt文件,並用按鈕和其他簡單的東西填充它,但現在我發現this amazing attitude indicator包括我的Qt GUI中的外部部件[python]
這個ai.py文件包含一個態度小部件,我想在我自己的GUI中導入。所以我設計與名爲空部件的.ui文件「viz_widget」,然後我寫了這條巨蟒文件
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui, uic
from ai import AttitudeIndicator
qtCreatorFile1 = "mainwindow.ui" # Enter file here.
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile1)
class OperatorGUI(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(OperatorGUI, self).__init__(parent)
QtGui.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.viz_widget = AttitudeIndicator()
self.viz_widget.setPitch(10)
self.viz_widget.setRoll(20)
self.viz_widget.setHover(500/10.)
self.viz_widget.setBaro(500/10.)
self.viz_widget.update()
# Key press functions
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Q: #Q: close the window
print "pressed Q: exit by keyboard"
self.close()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = OperatorGUI()
window.show()
sys.exit(app.exec_())
的GUI啓動,沒有任何錯誤,但我不能顯示的態度工具到我的GUI。是否有可能導入小部件?我的錯誤是什麼?
預先感謝您
編輯:這是文件maiwindow.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QWidget" name="viz_widget" native="true">
<property name="geometry">
<rect>
<x>50</x>
<y>40</y>
<width>671</width>
<height>441</height>
</rect>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
您可能只需將窗口小部件添加到窗口的佈局 - 或者說,它的中心窗口部件的佈局。 – ekhumoro
@ekhumoro我在QtCreator中的窗口(ui.file)中添加了一個名爲viz_widget的小部件。然後,我將它連接到self.viz_widget = AttitudeIndicator()'行的對象AttitudeIndicator。我需要做更多或不同的事情嗎? – marcoresk
首先:擺脫這兩個'__init__'調用 - 如果您使用'super',則不需要它們。其次,刪除你在QtCreator中添加的小部件,所以你只需要一個空的主窗口(並保存更改)。然後將此行添加到'__init__'的末尾:'layout = QtGui.QVBoxLayout(self.centralWidget())'。最後,將小部件添加到佈局:'layout.addWidget(self.viz_widget)'。 – ekhumoro