作成された他のすべてのツールを起動するためのハブとして機能するUIを作成しようとしています。問題は、UIをツールハブのUIから起動しようとすると、イベントループが既に実行されているため、私を解放できないということです。新しいウィンドウを起動するときに、APPH = QtGui.QApplication(sys.argv)とAPP.exec_()を実行できないことは知っています。これは、ツールループのUIに対してイベントループが既に実行されているためです。しかし、私はそれを別の方法で行う方法を理解することはできません。Pyside/Pyqtウィンドウから新しいウィンドウを開く(イベントループはすでに実行中)
これは、1つのツールのコード例です。単独で起動します。
global APP
APP = None
class toolwindow(QtGui.QDialog):
def __init__(self, parent=None):
init_app()
super(toolwindow, self).__init__(parent)
self.setWindowTitle('tool')
self.setMinimumSize(QtCore.QSize(500, 600))
self.setMaximumSize(QtCore.QSize(500, 600))
self.create_ui()
def create_ui(self):
code goes here
def closeEvent(self, event):
QtGui.QDialog.closeEvent(self, event)
return
def init_app():
global APP
APP = QtGui.QApplication.instance()
if not APP:
APP = QtGui.QApplication(sys.argv)
return
def start_ui():
win= toolwindow()
win.show()
APP.exec_()
if __name__ == '__main__':
start_ui()
global APP
APP = None
次に、toolshub UIのコードを示します。これらはどちらも別々のスクリプトです。 toolshubでは上記のツールをインポートしています。
import tool
LOGGER = logging.getLogger(__name__)
global APP
APP = None
class toolsHub(QtGui.QDialog):
def __init__(self, parent=None):
init_app()
super(toolsHub, self).__init__(parent)
self.setWindowTitle('Tools Launcher')
self.setSizeGripEnabled(False)
self.setMinimumSize(QtCore.QSize(300, 200))
self.setMaximumSize(QtCore.QSize(300, 200))
self.create_layouts()
def create_layouts(self):
master_layout = QtGui.QVBoxLayout()
self.setLayout(master_layout)
self.input_widgets()
grid_layout = QtGui.QGridLayout()
grid_layout.addWidget(self.env_creator, 0, 0)
grid_layout.addWidget(self.p4dl, 1, 0)
master_layout.addLayout(grid_layout)
def input_widgets(self):
self.tool_button= QtGui.QPushButton('launch tool')
self.tool_button.clicked.connect(self.launch_tool)
def launch_tool(self):
tool.start_ui()
def closeEvent(self, event):
QtGui.QDialog.closeEvent(self, event)
return
def init_app():
global APP
APP = QtGui.QApplication.instance()
if not APP:
APP = QtGui.QApplication(sys.argv)
return
def start_ui():
toolui = toolsHub()
toolui.show()
APP.exec_()
if __name__ == '__main__':
start_ui()
私はツールUIをツールUIから開くことができるように、これらを記述して構造化するにはどうすればよいですか?私はツールのUIを変更する必要がありますコードを推測している、私はAPP = QtGui.QApplication(sys.argv)とAPP.exec_()を取り出して、それを起動するために何をすべきかわからないことを知っています。
おかげ
すごいです! init_appモジュールをtool.pyに残して、APP = QtGui.QApplication(sys.argv)を設定する必要がありますか? もし私がそれを取り出してもそれはまだ機能しているので、私はそれが必要ではないようです。 main.pyの場合のみ? – ghost654