🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

2回答

5631閲覧

pythonのGUI作成におけるエラー(PyQt5に関して)

rikorikotaro

総合スコア4

Python 3.x

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

0グッド

0クリップ

投稿2019/10/15 05:26

前提・実現したいこと

main_pallete.uiファイルをmain_pallete.pyファイルに変換した後、そのpyファイルを別のpyファイルにインポートしようとしたところエラーが出てしまいました。

インポートする際は"from main_pallete import Ui_Form"という形式文を使うとネットを調べると必ず出てくるので、そのようにしてみたところエラーが出てしまいます。なぜインポート時にエラーが出るのか、エラーメッセージの理由を教えていただける方いらっしゃいましたらお願いしたいです。python初心者かつ質問するのが初めてなので、わかりにくい点ございましたら、コメントでお願いいたします。

発生している問題・エラーメッセージ

エラーメッセージ
cannot import name 'Ui_Form' from 'main_pallete' (/Users/riko/main_pallete.py)

### 該当のソースコード import sys from PyQt5.QtWidgets import QDialog, QApplication from PyQt5.QtCore import * from main_pallete import Ui_Form class Console(QDialog): #ウィンドウの初期化処理 def __init__(self,parent=None): #ベース・クラスの初期化 super(Console, self).__init__(parent) self.ui = Ui_Form() self.ui.setupUi(self) if __name__ == "__main__": app = QApplication(sys.argv) window = Console() window.show() sys.exit(app.exec_()) main() ```ここに言語名を入力 python ソースコード

試したこと

ネットでエラーの検索したのですがあまり情報が出てこなくて困っています。

補足情報(FW/ツールのバージョンなど)

PyQt5

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

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

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

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

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

coco_bauer

2019/10/15 05:34

「cannot import name 'Ui_Form' from 'main_pallete' (/Users/riko/main_pallete.py)」 (直訳:'main_pallet'とから、'UI_Form'という名前をインポートできません)というエラーメッセージなのですから、'main_pallete' (/Users/riko/main_pallete.py)の中で'UI_Form'という名前が定義されているかどうかを確認すべきです。(質問に書かれている"### 該当のソースコード"は、エラーの発生個所であって、エラーの原因箇所ではないです)
guest

回答2

0

PyQt5 で *.ui ファイルを読み込むという話であれば、PyQt5.uic.loadUi(<UI ファイルのパス>) で読み込めます。

以下のチュートリアルを参考にしてください。

How to Import a PyQt5 .ui File in a Python GUI - Nitratine

追記

basic.ui

<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>280</width> <height>72</height> </rect> </property> <property name="windowTitle"> <string>MainWindow</string> </property> <widget class="QWidget" name="centralwidget"> <widget class="QPushButton" name="printButton"> <property name="geometry"> <rect> <x>190</x> <y>10</y> <width>81</width> <height>23</height> </rect> </property> <property name="text"> <string>Print Content</string> </property> </widget> <widget class="QLineEdit" name="input"> <property name="geometry"> <rect> <x>10</x> <y>10</y> <width>171</width> <height>20</height> </rect> </property> <property name="placeholderText"> <string>Wow! A Placeholder!</string> </property> </widget> <widget class="QPushButton" name="modeButton"> <property name="geometry"> <rect> <x>10</x> <y>40</y> <width>81</width> <height>23</height> </rect> </property> <property name="text"> <string>Mode</string> </property> </widget> <widget class="QPushButton" name="setButton"> <property name="geometry"> <rect> <x>100</x> <y>40</y> <width>81</width> <height>23</height> </rect> </property> <property name="text"> <string>Set</string> </property> </widget> <widget class="QPushButton" name="clearButton"> <property name="geometry"> <rect> <x>190</x> <y>40</y> <width>81</width> <height>23</height> </rect> </property> <property name="text"> <string>Clear</string> </property> </widget> </widget> </widget> <resources/> <connections/> </ui>

python

1from PyQt5 import QtWidgets, uic 2import sys 3 4 5class Ui(QtWidgets.QMainWindow): 6 def __init__(self): 7 super(Ui, self).__init__() 8 ui_class = uic.loadUiType("basic.ui", self)[0] 9 self.ui = ui_class() 10 self.ui.setupUi(self) 11 self.ui.input.setText("hogehoge") 12 13 14app = QtWidgets.QApplication(sys.argv) 15window = Ui() 16window.show() 17app.exec_()

投稿2019/10/15 06:01

編集2020/09/14 03:45
tiitoi

総合スコア21956

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

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

Kazumori102

2020/09/13 19:04

逐一self.findChildでつなげるのは面倒に思えるのですが、もっといい方法ってありませんか?
Kazumori102

2020/09/18 12:44

了解です。それ以外にはありますでしょうか?
tiitoi

2020/09/18 12:48

他のやり方はわからないです
guest

0

main_pallete.pyの中を見ると、ひとつのclassがあると思います。
そのclass名をimportしてあげれば正常に読み込めるはずです。

from main_pallete import class名

投稿2020/01/23 02:58

TodayPorton

総合スコア29

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問