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

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

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

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

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

3369閲覧

[PyQt5]QSplitterで分割した画面にQWebEngineViewを使ってWebページを表示させたい

parcyparcy

総合スコア16

Qt

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

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2018/12/18 09:32

PyQt5でWebページを動かせるようなGUIを作ろうとしています。
画面を区切りつつ、それぞれの区画でWebページやボタンを置いたりしたくなったところでどうやればいいか分からなくなりました...

コード中のtoprightの区画にself.browserを表示したいのですが、その方法を教えてください!

以下、参考にしたサイトです
「PyQt5 widgets II」
http://zetcode.com/gui/pyqt5/widgets2/
「PythonとPyQt5で簡易ブラウザを作ってみた話」
https://qiita.com/montblanc18/items/88d0b639de86b7cac613

python

1import sys 2from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame, QSplitter, 3 QApplication, QDesktopWidget) 4from PyQt5.QtCore import QUrl 5from PyQt5.QtWebEngineWidgets import QWebEngineView 6from PyQt5.QtCore import Qt 7 8__program__ = 'seleniumnium' 9 10 11class seleniumniumWindow(QWidget): 12 13 def __init__(self): 14 super().__init__() 15 16 self.initUI() 17 18 19 def initUI(self): 20 21 initurl = 'https://teratail.com/' 22 23 # setting browser 24 self.browser = QWebEngineView() 25 self.browser.load(QUrl(initurl)) 26 self.browser.resize(1000,600) 27 self.browser.move(200,200) 28 self.browser.setWindowTitle(__program__) 29 30 # signal catch from moving web pages. 31 self.browser.urlChanged.connect(self.updateCurrentUrl) 32 33 # pagesplitter 34 hbox = QHBoxLayout(self) 35 36 topleft = QFrame(self) 37 topleft.setFrameShape(QFrame.StyledPanel) 38 39 topright = QFrame(self) 40 topright.setFrameShape(QFrame.StyledPanel) 41 42 bottom = QFrame(self) 43 44 splitter1 = QSplitter(Qt.Horizontal) 45 splitter1.addWidget(topleft) 46 splitter1.addWidget(topright) 47 48 splitter2 = QSplitter(Qt.Vertical) 49 splitter2.addWidget(splitter1) 50 splitter2.addWidget(bottom) 51 52 hbox.addWidget(splitter2) 53 topleft.setWidget(self.browser) 54 self.setLayout(hbox) 55 56 # setting layout 57 self.resize(1200, 800) #ウィンドウサイズ 58 self.center() 59 self.setWindowTitle(__program__) 60 self.show() 61 62 63 def center(self): 64 ''' centering widget 65 ''' 66 qr = self.frameGeometry() 67 cp = QDesktopWidget().availableGeometry().center() 68 qr.moveCenter(cp) 69 self.move(qr.topLeft()) 70 71 def loadPage(self): 72 ''' move web page which is set at url_edit 73 ''' 74 move_url = QUrl(self.url_edit.text()) 75 self.browser.load(move_url) 76 self.updateCurrentUrl 77 78 def updateCurrentUrl(self): 79 ''' rewriting url_edit when you move different web page. 80 ''' 81 # current_url = self.browser.url().toString() 82 self.url_edit.clear() 83 self.url_edit.insert(self.browser.url().toString()) 84 85if __name__ == '__main__': 86 # mainPyQt5() 87 app = QApplication(sys.argv) 88 89 ex = seleniumniumWindow() 90 sys.exit(app.exec_())

topleft.addWidget(self.browser)とかtopleft.setWidget(self.browser)とかでできるかなと思って試して見ましたがだめでした。

よろしくお願いいたします!!!

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

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

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

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

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

guest

回答1

0

ベストアンサー

topleft区画にブラウザを表示させるだけなら、splitter1がすでにHorizontalのレイアウトになっているので、直接、splitter1にaddWedgetを使い、self.browserを設定すればいいと思います。

以下のような感じです。

python

1 splitter1 = QSplitter(Qt.Horizontal) 2 splitter1.addWidget(self.browser) 3 splitter1.addWidget(topright)

また、topleft変数にある、QFrame内にブラウザをセットすることにこだわりがあるならば、何かLayoutオブジェクトを作成して、topleftにsetLayout経由で設定してもよいかもしれません。

以下のような感じです。(とりあえず、QGridLayoutで設定してみましたが、Layoutオブジェクトなら何でも良さそうです。)

python

1 browserLayout = QGridLayout() 2 browserLayout.addWidget(self.browser) 3 topleft.setLayout(browserLayout)

参考

どちらもC++の話ですが、概念はPythonにも共通すると思います。

設定例

以下、設定例です。

python

1import sys 2from PyQt5.QtWidgets import (QWidget, QGridLayout, QHBoxLayout, QFrame, QSplitter, 3 QApplication, QDesktopWidget) 4from PyQt5.QtCore import QUrl 5from PyQt5.QtWebEngineWidgets import QWebEngineView 6from PyQt5.QtCore import Qt 7 8__program__ = 'seleniumnium' 9 10 11class seleniumniumWindow(QWidget): 12 13 def __init__(self): 14 super().__init__() 15 16 self.initUI() 17 18 19 def initUI(self): 20 21 initurl = 'https://teratail.com/' 22 23 # setting browser 24 self.browser = QWebEngineView() 25 self.browser.load(QUrl(initurl)) 26 self.browser.resize(1000,600) 27 self.browser.move(200,200) 28 self.browser.setWindowTitle(__program__) 29 30 # signal catch from moving web pages. 31 self.browser.urlChanged.connect(self.updateCurrentUrl) 32 33 # pagesplitter 34 hbox = QHBoxLayout(self) 35 36 topleft = QFrame(self) 37 topleft.setFrameShape(QFrame.StyledPanel) 38 39 topright = QFrame(self) 40 topright.setFrameShape(QFrame.StyledPanel) 41 42 bottom = QFrame(self) 43 44 splitter1 = QSplitter(Qt.Horizontal) 45 splitter1.addWidget(topleft) 46 splitter1.addWidget(topright) 47 48 splitter2 = QSplitter(Qt.Vertical) 49 splitter2.addWidget(splitter1) 50 splitter2.addWidget(bottom) 51 52 hbox.addWidget(splitter2) 53 # 以下を追加 54 browserLayout = QGridLayout() 55 browserLayout.addWidget(self.browser) 56 topleft.setLayout(browserLayout) 57 58 # コメントアウトしました。 59 # topleft.setWidget(self.browser) 60 self.setLayout(hbox) 61 62 # setting layout 63 self.resize(1200, 800) #ウィンドウサイズ 64 self.center() 65 self.setWindowTitle(__program__) 66 self.show() 67 68 69 def center(self): 70 ''' centering widget 71 ''' 72 qr = self.frameGeometry() 73 cp = QDesktopWidget().availableGeometry().center() 74 qr.moveCenter(cp) 75 self.move(qr.topLeft()) 76 77 def loadPage(self): 78 ''' move web page which is set at url_edit 79 ''' 80 move_url = QUrl(self.url_edit.text()) 81 self.browser.load(move_url) 82 self.updateCurrentUrl 83 84 def updateCurrentUrl(self): 85 ''' rewriting url_edit when you move different web page. 86 ''' 87 # current_url = self.browser.url().toString() 88 self.url_edit.clear() 89 self.url_edit.insert(self.browser.url().toString()) 90 91if __name__ == '__main__': 92 # mainPyQt5() 93 app = QApplication(sys.argv) 94 95 ex = seleniumniumWindow() 96 sys.exit(app.exec_()) 97

投稿2018/12/22 11:28

yuwki0131

総合スコア160

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

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

parcyparcy

2019/02/04 04:08

返答が大変遅れてしまい申し訳ありません、諸事情でこちらの開発を中断していました... ご提示いただいた設定で自分のやりたいことができました!回答ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問