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

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

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

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

Q&A

解決済

1回答

3461閲覧

PysimpleGUIでの他のソースファイルのclassのimport

pussy_pussy

総合スコア22

Python 3.x

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

1グッド

0クリップ

投稿2020/07/21 09:20

編集2020/07/21 09:48

前提・実現したいこと

PysimpleGUIで
同じ階層にいるソースファイルのクラスをインポートしたい
(3つとも同じ階層)

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

main.pyを実行して、「テスト開始」ボタンを押すと NameError: name 'sg' is not defined となる。 (あとまだ読み込めていないので予想ですが、test.pyのインスタンスpopup2が認識されるのか疑問です。 クラスTestpopupをインポートしているだけなので。どうすればよいでしょうか)

該当のソースコード

(上から、main.py,test.py,point.py)

import PySimpleGUI as sg from test import TestPopup layout = [ [sg.Text("覚えたい単語:"),sg.InputText()], [sg.Text("その意味:"),sg.InputText()], [sg.Button("追加")], [sg.Button("削除")], [sg.Button("テスト開始")] ] window = sg.Window("単語暗記", layout) #タイトル d ={} def listadd(): d[values[0]]=values[1] print(d) def listdelete(): del d[values[0]] print(d) while True: event, values = window.read() if event == sg.WIN_CLOSED or event == 'Cancel': break if event == "追加": listadd() if event == "削除": listdelete() if event =="テスト開始": popup1 = TestPopup() popup1.Move() window.close() ################################ import PySimpleGUI as sg from point import PointPopup class TestPopup(): def __init__(self): self.layout = [ [sg.Text("TEST",size=(20,1))], [sg.Button("ファイル参照")], [sg.Button("終了")], ] self.window =sg.Window(title="Test",layout=self.layout) def Move(self): while True: event,values = self.window.read() if event == sg.WIN_CLOSED: break if event == "ファイル参照": sg.popup_get_file("ファイル") if event == "終了": popup2 = PointPopup() popup2.Finish() self.window.close() ################################ import PySimpleGUI as sg class PointPopup(): def __init__(self): self.layout = [ [sg.Text("POINT",size=(20,1))], [sg.Button("確認")], ] self.window =sg.Window(title="Point",layout=self.layout) def Finish(self): while True: event,values = self.window.read() if event == "確認" or event == sg.WIN_CLOSED: break self.window.close()
teamikl👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

イメージ説明

コードをコピーして3つのファイルに分割後、
エラー無く実行できました。


考えられる原因: main.py, test.py, point.py いずれかのファイルで

  • import PySimpleGUI as sg がない
  • import PySimpleGUI ... as sg を忘れている

モジュールのインストールは問題ないと思いますが、念のため確認

python

1import PySimpleGUI as sg

を実行してエラーは出ますか?


追記:
エラーログにエラーが出た場所のファイル・行数等が出力されてるはずなので、
エラーの詳細を記載してください。

投稿2020/07/21 09:38

編集2020/07/21 09:39
teamikl

総合スコア8664

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

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

pussy_pussy

2020/07/21 09:47

import文単体ではerrorは出ませんでした。1つにまとめると上手くいきます。 追記なのですが、テスト開始というボタンを押すと終了してしまいます。 File "c:/Users/user/Documents/Python Scripts/GUIアプリ作成/main.py", line 3, in <module> from test import TestPopup ImportError: cannot import name 'TestPopup' from 'test' Import文は3つとも抜けていません
teamikl

2020/07/21 09:57

>ImportError: cannot import name 'TestPopup' from 'test' 質問文と違うエラーになってませんか??? こちらは、「テスト開始」でもエラーはでません。 一つ問題があるとしたら、「test.py」というファイル名は標準モジュールと被るので、 環境によってはカレントディレクトリのファイルが読まれない可能性があります。 import test print(test) として、同じ場所にあるファイルが読み込まれているか、確かめてみてください。
pussy_pussy

2020/07/21 10:06

なるほど!VScodeなので、カレントディレクトリの名前をTest.pyに変えたら実行できたのと、カレントディレクトリのファイルとは違うものが読み込まれていました。ありがとうございました。 (Pycharmではtest.pyでも問題なかったです。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問