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

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

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

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

Q&A

解決済

2回答

2218閲覧

Python - wxPythonのwx.StaticTextが表示されない

HaruruYaki

総合スコア16

Python

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

0グッド

0クリップ

投稿2020/11/16 06:41

編集2020/11/17 08:32

###実現したいこと
2秒後にパネルの色が変わり、そこにwx.StaticTextを表示させるようにしたのですが、表示されませんでした。
エラーもなにも出力さていません。
「wx.StaticText 表示されない」とGoogleで検索しても何も出てこなかったので、回答よろしくお願いします。
###ソースコード

Python

1import wx 2import time 3import threading 4class MyFrame(wx.Frame): 5 def TimeSleep(self,value=0): 6 time.sleep(value) 7 self.OnStart() 8 def __init__(self): 9 wx.Frame.__init__(self,None,-1,"title") 10 self.panel = wx.Panel(self,-1) 11 self.panel.SetBackgroundColour("black") 12 self.Refresh() 13 t1=threading.Thread(target=self.TimeSleep,args=(2,)) 14 t1.start() 15 def OnStart(self): 16 self.panel.SetBackgroundColour("white") 17 lbl = wx.StaticText(self.panel,-1,"Finish") 18 self.Refresh() 19app = wx.App(False) 20f = MyFrame() 21f.Show(True) 22app.MainLoop()

###環境
Windows10
Python 3.8
64bit

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

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

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

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

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

guest

回答2

0

Mac環境でしか試してないのですが、
パネルが黒から白に変わって "Finish" と表示されました。

Python 3.9
wxPython 4.1.0

検索してみたところ古い記事で参考にならないかもですが、

what is the reason that frame.Show() does not show up any window?

下の方に window handle を取得して WS_VISIBLE をセットするサンプルがあったので貼っておきます。

Python

1import wx 2import ctypes 3 4app = wx.App() 5frame = wx.Frame(None, -1, ‘simple.py’) 6whnd = frame.GetHandle() 7ctypes.windll.user32.ShowWindow(whnd, 5) 8frame.Show() 9app.MainLoop()

投稿2020/11/17 15:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

HaruruYaki

2020/11/18 11:35

回答ありがとうございます。 こちらで試したところ、ウィンドウは表示されるものの、「Finish」とは表示されませんでした。 (状況は変わりませんでした。) threadingを使わずに普通にwxPythonを実行するのは、正常に表示されるためthreadingに原因があると考えられるのですが...
退会済みユーザー

退会済みユーザー

2020/11/19 02:24

Windows環境でStaticTextが表示されない状況を確認しました。 wxPython, threading で調べたところ、 https://wiki.wxpython.org/LongRunningTasks この記事が見つかりました。 Windows環境で1つ目のサンプルを試したところ wx.NewId() は deprecated の警告が出ますが、 Start, Stopボタンでラベル表示が切り替わるのは確認できました。 コピペで試しただけであまり中身の理解はできていませんが、参考になりますでしょうか。
guest

0

自己解決

質問からとても時間がかかってしまい、本当に申し訳ございません。
また、回答者様が回答してから、自分の返答がないまま、時間がたってしまい、本当に申し訳ございません。
いろいろと試してみた結果、解決方法が見つかったので紹介したいと思います。
(自己解決でしたすいません)

threadingを実行すると、別のところに行っちゃって、GUI操作できないようです。つまり、今回のような不具合を修正するには、メインに戻る必要があるということです。
そのメインに戻るのがwxに用意されていました。wx.CallAfter()です。

ソースコードはこのように書きました

Python

1import wx 2import time 3import threading 4class MyFrame(wx.Frame): 5 def TimeSleep(self,value=0): 6 time.sleep(value) 7 wx.CallAfter(self.OnStart) 8 def __init__(self): 9 wx.Frame.__init__(self,None,-1,"title") 10 self.panel = wx.Panel(self,-1) 11 self.panel.SetBackgroundColour("black") 12 self.Refresh() 13 t1=threading.Thread(target=self.TimeSleep,args=(2,)) 14 t1.start() 15 def OnStart(self): 16 self.panel.SetBackgroundColour("white") 17 lbl = wx.StaticText(self.panel,-1,"Finish") 18 self.Refresh() 19app = wx.App(False) 20f = MyFrame() 21f.Show(True) 22app.MainLoop()

投稿2021/04/01 02:46

編集2021/04/01 02:47
HaruruYaki

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問