0

PySide を使用してアプリケーションを構築しており、別の .ui ファイルからウィジェットをロードできるようにしたいと考えています。以下は私が試したコードですが、メインウィンドウとは別にロードされたドックウィジェットをメインウィンドウにドッキングできません。メイン ウィンドウの ui ファイルには、シンプルなメイン ウィンドウとそれに既にドッキングされているいくつかのアイテムが含まれています。dock_widget ui には、ドック ウィジェットといくつかのボタンが含まれています。ドック ウィジェットのバーがロードされたらダブルクリックすると、何もドッキングされないように見え、メイン ウィンドウ上にドラッグしてもドッキングしません。メイン ウィンドウはドック ウィジェットを確実に受け入れます。これは、内部で正常に動作する定義済みのものがいくつかあるためです。

#!/usr/bin/python

# Import PySide classes
import sys
from PySide.QtGui import *
from PySide.QtCore import *
from PySide.QtUiTools import QUiLoader


def load_ui(ui_file, parent=None):
    loader = QUiLoader()
    file = QFile(ui_file)
    file.open(QFile.ReadOnly)
    myWidget = loader.load(file, None)
    myWidget.show()
    file.close()
    myWidget.show()
    return myWidget

# Create a Qt application
app = QApplication(sys.argv)


# Create a Label and show it
main_window = load_ui("ui/main_window.ui")
dock_widget = load_ui("ui/console.ui", main_window)

# Enter Qt application main loop
app.exec_()
sys.exit()

console.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>DockWidget</class>
 <widget class="QDockWidget" name="DockWidget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>542</width>
    <height>261</height>
   </rect>
  </property>
  <property name="contextMenuPolicy">
   <enum>Qt::DefaultContextMenu</enum>
  </property>
  <property name="windowTitle">
   <string>DockWidget</string>
  </property>
  <widget class="QWidget" name="dockWidgetContents">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QTextEdit" name="textEdit_2"/>
    </item>
    <item>
     <widget class="QTextEdit" name="textEdit"/>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

私が別の方法で何をすべきかについての考え

4

1 に答える 1

1

に電話しないでくださいQDockWidget::show。これにより、通常の QWidget のように動作するようになります。QMainWindow::addDockWidget代わりに使用してください。

def load_ui(ui_file, parent=None):
    loader = QUiLoader()
    file = QFile(ui_file)
    file.open(QFile.ReadOnly)
    myWidget = loader.load(file, None)
    file.close()
    return myWidget

main_window = load_ui("ui/main_window.ui")
dock_widget = load_ui("ui/console.ui", main_window)
main_window.show()
main_window.addDockWidget(Qt.LeftDockWidgetArea, dock_widget)
于 2013-06-10T06:51:35.657 に答える