質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1433閲覧

PyQt ショートカットが繰り返し使えない

Karlfeldt

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/16 09:03

前提・実現したいこと

現在、PythonでWebブラウザを作っており
その中でGoogleの開発者ツールを実装したのですが
それを表示する Ctrl+D のショートカットが一度しか使えずに悩んでおります

試したこと

self.shortcut = QShortcut(QKeySequence('Ctrl+D'), MainWindow)

def open_dev
self.inspector.show()

をループさせてみる (何故か一回使用後使えなくなった)

その後似たようなことを何個か試してもだめでしたので最終的に
self.inspector.show()をconnectの中に入れてみましたがそれでもダメでした

おそらく私が、self.inspector.show()の意味を理解していないのが原因かなと思っています、おそらくshow だと閉じるではなく hide じゃないと動かないんだろうなぁ
的なことは漠然と理解しているのですが、ではどうしたらウィンドウを閉じた後に
もう一度Windowを開けるかが分からず困っています...

一度いちいち新しいWindowを作るために
self.inspector = QWebEngineView()
から
self.shortcut.activated.connect(self.open_dev)
までを関数の中に入れてそれを呼び出そうとしたのですが

def setupUi の下に
def devopen(self, MainWindow)を置いてその中に
self.inspector = QWebEngineView()
self.inspector.setWindowTitle('Web Inspector')
self.inspector.load(QtCore.QUrl(DEBUG_URL))
self.webEngineView.page().setDevToolsPage(self.inspector.page())
self.shortcut = QShortcut(QKeySequence('Ctrl+D'), MainWindow)
self.shortcut.activated.connect(self.inspector.show)

を入れたのですが、class Ui_MainWindowにMainWindowというオブジェクトがない
とエラーが起きてしまい

私の考える方法では完全に行き詰まってしまいました。
解決法をサンプルコードなどを交えて説明していただけるとありがたいです..

該当のソースコード

python

1from PyQt5 import QtCore, QtWidgets, QtGui 2from PyQt5.QtGui import QKeySequence 3from PyQt5.QtWidgets import QShortcut 4from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineSettings 5import subprocess 6import sys, os 7 8f = open('setdocument.txt', 'r') 9Durl = f.readline() 10f.close() 11 12DEBUG_PORT = '5588' 13DEBUG_URL = 'http://127.0.0.1:%s' % DEBUG_PORT 14os.environ['QTWEBENGINE_REMOTE_DEBUGGING'] = DEBUG_PORT 15 16class Ui_MainWindow(object): 17 def setupUi(self, MainWindow): 18 MainWindow.setObjectName("MainWindow") 19 MainWindow.resize(988, 786) 20 self.centralwidget = QtWidgets.QWidget(MainWindow) 21 self.centralwidget.setObjectName("centralwidget") 22 self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) 23 self.gridLayout.setObjectName("gridLayout") 24 self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget) 25 self.calendarWidget.setEnabled(True) 26 font = QtGui.QFont() 27 font.setFamily("メイリオ") 28 self.calendarWidget.setFont(font) 29 self.calendarWidget.setLocale(QtCore.QLocale(QtCore.QLocale.Japanese, QtCore.QLocale.Japan)) 30 self.calendarWidget.setObjectName("calendarWidget") 31 self.gridLayout.addWidget(self.calendarWidget, 0, 2, 1, 1) 32 self.calendarWidget.hide() 33 self.verticalLayout = QtWidgets.QVBoxLayout() 34 self.verticalLayout.setObjectName("verticalLayout") 35 self.horizontalLayout = QtWidgets.QHBoxLayout() 36 self.horizontalLayout.setObjectName("horizontalLayout") 37 self.back = QtWidgets.QPushButton(self.centralwidget) 38 self.back.setText("") 39 icon = QtGui.QIcon() 40 icon.addPixmap(QtGui.QPixmap(":/icon/back.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 41 self.back.setIcon(icon) 42 self.back.setObjectName("back") 43 self.horizontalLayout.addWidget(self.back) 44 self.reload = QtWidgets.QPushButton(self.centralwidget) 45 self.reload.setText("") 46 icon1 = QtGui.QIcon() 47 icon1.addPixmap(QtGui.QPixmap(":/icon/reload.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 48 self.reload.setIcon(icon1) 49 self.reload.setObjectName("reload") 50 self.horizontalLayout.addWidget(self.reload) 51 self.forward = QtWidgets.QPushButton(self.centralwidget) 52 self.forward.setText("") 53 icon2 = QtGui.QIcon() 54 icon2.addPixmap(QtGui.QPixmap(":/icon/forward.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 55 self.forward.setIcon(icon2) 56 self.forward.setObjectName("forward") 57 self.horizontalLayout.addWidget(self.forward) 58 self.calendar = QtWidgets.QPushButton(self.centralwidget) 59 self.calendar.setText("") 60 icon3 = QtGui.QIcon() 61 icon3.addPixmap(QtGui.QPixmap(":/icon/calendar.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 62 self.calendar.setIcon(icon3) 63 self.calendar.setObjectName("calendar") 64 self.horizontalLayout.addWidget(self.calendar) 65 self.timer = QtWidgets.QPushButton(self.centralwidget) 66 self.timer.setText("") 67 icon4 = QtGui.QIcon() 68 icon4.addPixmap(QtGui.QPixmap(":/icon/stopwatch.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 69 self.timer.setIcon(icon4) 70 self.timer.setObjectName("timer") 71 self.horizontalLayout.addWidget(self.timer) 72 self.verticalLayout.addLayout(self.horizontalLayout) 73 self.webEngineView = QtWebEngineWidgets.QWebEngineView(self.centralwidget) 74 self.webEngineView.page().settings().setAttribute(QWebEngineSettings.PluginsEnabled, True) 75 self.webEngineView.page().settings().setAttribute(QWebEngineSettings.PluginsEnabled, True) 76 self.webEngineView.page().settings().setAttribute(QWebEngineSettings.PdfViewerEnabled, True) 77 self.webEngineView.page().settings().setAttribute(QWebEngineSettings.PluginsEnabled, True) 78 self.webEngineView.page().settings().setAttribute(QWebEngineSettings.PdfViewerEnabled, True) 79 self.webEngineView.page().settings().setAttribute(QWebEngineSettings.DnsPrefetchEnabled, True) 80 self.webEngineView.page().settings().setAttribute(QWebEngineSettings.AllowRunningInsecureContent, True) 81 self.webEngineView.page().settings().setAttribute(QWebEngineSettings.FullScreenSupportEnabled, True) 82 self.webEngineView.setUrl(QtCore.QUrl("{}".format(Durl))) 83 self.inspector = QWebEngineView() 84 self.inspector.setWindowTitle('Web Inspector') 85 self.inspector.load(QtCore.QUrl(DEBUG_URL)) 86 self.webEngineView.page().setDevToolsPage(self.inspector.page()) 87 self.shortcut = QShortcut(QKeySequence('Ctrl+D'), MainWindow) 88 self.shortcut.activated.connect(self.open_dev) 89 self.webEngineView.setObjectName("webEngineView") 90 self.verticalLayout.addWidget(self.webEngineView) 91 self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) 92 MainWindow.setCentralWidget(self.centralwidget) 93 self.statusbar = QtWidgets.QStatusBar(MainWindow) 94 self.statusbar.setEnabled(False) 95 self.statusbar.setObjectName("statusbar") 96 MainWindow.setStatusBar(self.statusbar) 97 98 99 self.retranslateUi(MainWindow) 100 self.back.clicked.connect(self.webEngineView.back) 101 self.reload.clicked.connect(self.webEngineView.reload) 102 self.forward.clicked.connect(self.webEngineView.forward) 103 self.calendar.pressed.connect(self.calendarWidget.show) 104 self.calendar.clicked.connect(self.calendarWidget.hide) 105 self.timer.clicked.connect(self.FuncName) 106 QtCore.QMetaObject.connectSlotsByName(MainWindow) 107 108 109 def retranslateUi(self, MainWindow): 110 _translate = QtCore.QCoreApplication.translate 111 MainWindow.setWindowTitle(_translate("BonFire", "BonFire")) 112 113 def FuncName(self): 114 subprocess.Popen(r'app/timer.exe') 115 116 def open_dev(self): 117 self.inspector.show() 118 119 120 121 122 123from PyQt5 import QtWebEngineWidgets 124import Picture_rc 125

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Windowを毎回作成する方法で良いと思います
ショートカットはsetupUi内で定義し、connectで開発者ツールのWindowを作成する関数を呼ぶと繰り返し表示することができます

python

1def setupUi(self, MainWindow): 2 ~~~()~~~ 3 self.shortcut = QShortcut(QKeySequence('Ctrl+D'), MainWindow) 4 self.shortcut.activated.connect(self.open_dev) 5 ~~~()~~~ 6 7def open_dev(self): 8 self.inspector = QWebEngineView() 9 self.inspector.setWindowTitle('Web Inspector') 10 self.inspector.load(QtCore.QUrl(DEBUG_URL)) 11 self.webEngineView.page().setDevToolsPage(self.inspector.page()) 12 self.inspector.show()

投稿2021/06/16 15:17

hibiki24

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問