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

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

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

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

Python

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

Q&A

解決済

2回答

2327閲覧

Pythonで自作したWebBrowserをEXE化するとエラーが起きる

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/05/27 10:52

前提・実現したいこと

PythonとQt5を用いてブラウザーを自作したのですが
pyinstallerを用いてEXE化した際に
QtWebEngineProcess.exeが存在しないと言われ
プログラムと同じディレクトリにQtWebEngineProcess.exeを配置することにより
解決したのですが、この後に起動すると再び

[0527/194444.844:ERROR:icu_util.cc(251)] Couldn't mmap icu data file

とエラーが発生します

解決方法をご存じの方は教えていただけると助かります

該当のソースコード

Python

1from PyQt5.QtCore import * 2from PyQt5.QtWidgets import * 3from PyQt5.QtGui import * 4from PyQt5.QtWebEngineWidgets import * 5from PyQt5.QtPrintSupport import * 6import os 7import sys 8 9 10class MainWindow(QMainWindow): 11 12 13 def __init__(self, *args, **kwargs): 14 super(MainWindow, self).__init__(*args, **kwargs) 15 16 17 self.tabs = QTabWidget() 18 19 20 self.tabs.setDocumentMode(True) 21 22 23 self.tabs.tabBarDoubleClicked.connect(self.tab_open_doubleclick) 24 25 26 self.tabs.currentChanged.connect(self.current_tab_changed) 27 28 29 self.tabs.setTabsClosable(True) 30 31 32 self.tabs.tabCloseRequested.connect(self.close_current_tab) 33 34 35 self.setCentralWidget(self.tabs) 36 37 38 self.status = QStatusBar() 39 40 41 self.setStatusBar(self.status) 42 43 44 navtb = QToolBar("ツールバーを非表示") 45 46 47 self.addToolBar(navtb) 48 49 50 back_btn = QAction("1ページ戻る", self) 51 52 53 back_btn.setStatusTip("Back to previous page") 54 55 56 57 back_btn.triggered.connect(lambda: self.tabs.currentWidget().back()) 58 59 60 navtb.addAction(back_btn) 61 62 63 next_btn = QAction("1ページ前へ", self) 64 next_btn.setStatusTip("Forward to next page") 65 next_btn.triggered.connect(lambda: self.tabs.currentWidget().forward()) 66 navtb.addAction(next_btn) 67 68 69 reload_btn = QAction("更新", self) 70 reload_btn.setStatusTip("Reload page") 71 reload_btn.triggered.connect(lambda: self.tabs.currentWidget().reload()) 72 navtb.addAction(reload_btn) 73 74 75 home_btn = QAction("ホーム", self) 76 home_btn.setStatusTip("Go home") 77 78 79 home_btn.triggered.connect(self.navigate_home) 80 navtb.addAction(home_btn) 81 82 83 navtb.addSeparator() 84 85 86 self.urlbar = QLineEdit() 87 88 89 self.urlbar.returnPressed.connect(self.navigate_to_url) 90 91 92 navtb.addWidget(self.urlbar) 93 94 self.add_new_tab(QUrl('http://www.google.com'), 'Homepage') 95 96 97 self.show() 98 99 100 self.setWindowTitle("BASIC BROWSER") 101 102 103 def add_new_tab(self, qurl = None, label ="Blank"): 104 105 106 if qurl is None: 107 108 qurl = QUrl('http://www.google.com') 109 110 111 browser = QWebEngineView() 112 113 114 browser.setUrl(qurl) 115 116 117 i = self.tabs.addTab(browser, label) 118 self.tabs.setCurrentIndex(i) 119 120 browser.urlChanged.connect(lambda qurl, browser = browser: 121 self.update_urlbar(qurl, browser)) 122 123 browser.loadFinished.connect(lambda _, i = i, browser = browser: 124 self.tabs.setTabText(i, browser.page().title())) 125 126 127 def tab_open_doubleclick(self, i): 128 129 if i == -1: 130 131 self.add_new_tab() 132 133 134 def current_tab_changed(self, i): 135 136 137 qurl = self.tabs.currentWidget().url() 138 139 140 self.update_urlbar(qurl, self.tabs.currentWidget()) 141 142 143 self.update_title(self.tabs.currentWidget()) 144 145 146 def close_current_tab(self, i): 147 148 149 if self.tabs.count() < 2: 150 151 return 152 153 154 self.tabs.removeTab(i) 155 156 157 def update_title(self, browser): 158 159 160 if browser != self.tabs.currentWidget(): 161 # do nothing 162 return 163 164 165 title = self.tabs.currentWidget().page().title() 166 167 168 self.setWindowTitle("% s - BASIC BROWSER" % title) 169 170 def navigate_home(self): 171 172 self.tabs.currentWidget().setUrl(QUrl("http://www.google.com")) 173 174 def navigate_to_url(self): 175 176 177 q = QUrl(self.urlbar.text()) 178 179 180 if q.scheme() == "": 181 # set scheme 182 q.setScheme("http") 183 184 185 self.tabs.currentWidget().setUrl(q) 186 187 def update_urlbar(self, q, browser = None): 188 189 # If this signal is not from the current tab, ignore 190 if browser != self.tabs.currentWidget(): 191 192 return 193 194 self.urlbar.setText(q.toString()) 195 196 self.urlbar.setCursorPosition(0) 197 198app = QApplication(sys.argv) 199 200app.setApplicationName("BASIC BROWSER") 201 202window = MainWindow() 203 204app.exec_()

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

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

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

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

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

guest

回答2

0

ベストアンサー

QtWebEngineProcessとそれに関連するファイルをプログラムと同様のディレクトリに入れたら起動できました!

投稿2021/05/28 01:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

該当するか解りませんが、
バグ報告が上がっているので、確認してみてはどうでしょう

QTBUG-85576 QtWebEngine on macOS - Couldn't mmap icu data file

解決策: 環境変数 DYLD_FRAMEWORK_PATH が設定されていれば、それを解除。

※ デプロイ時の共通の問題だと思いますが、リンク先のコメントでは macdeployqt

投稿2021/05/27 23:26

teamikl

総合スコア8664

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問