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

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

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

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

Q&A

0回答

1107閲覧

wx.pythonを使ったGUIでGradientButtonを使った画面遷移を行うとRuntimeErrorが出る。

able

総合スコア7

Python 3.x

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

0グッド

0クリップ

投稿2021/01/05 13:39

前提・実現したいこと

wx.pythonを使ってGradientButtonにより画面遷移を行うGUIを作成しています。
画面遷移自体はできるのですが、RuntimeErrorが表示されてしまいます。
GradientButtonの何らかの処理が終わる前に破棄しているのが原因だと思うのですが、RuntimeErrorを表示させないように画面遷移させる方法はないでしょうか。
ご教授いただければ幸いです。

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

RuntimeError: wrapped C/C++ object of type GradientButton has been deleted

該当のソースコード

python

1#menu.py 2import wx 3import wx.lib.agw.gradientbutton as GB 4from A import APanel 5 6 7class MeinFrame(wx.Frame): 8 def __init__(self): 9 super().__init__(None, wx.ID_ANY, 'フレーム') 10 self.sizer = wx.BoxSizer(wx.VERTICAL) 11 self.SetSizer(self.sizer) 12 self.set_screen(MenuPanel) 13 14 def set_screen(self,panel): 15 self.sizer.Clear(False) 16 self.DestroyChildren() 17 self.now_panel=panel(self) 18 self.sizer.Add(self.now_panel,1,wx.EXPAND) 19 self.sizer.Layout() 20 21 22class MenuPanel(wx.Panel): 23 def __init__(self, parent): 24 super().__init__(parent, wx.ID_ANY ) 25 self.parent=parent 26 self.parent.SetSize(700, 400) 27 self.SetBackgroundColour(wx.Colour(255, 220, 189)) 28 29 self.btn = GB.GradientButton(self, 0, None,'A',size=(200,100)) 30 self.btn.SetTopStartColour(wx.Colour(251, 255, 41)) 31 self.btn.SetTopEndColour(wx.Colour(0, 203, 255)) 32 self.btn.SetBottomStartColour(wx.Colour(0, 203, 255)) 33 self.btn.SetBottomEndColour(wx.Colour(202, 123, 255)) 34 35 font = wx.Font(20, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) 36 self.btn.SetFont(font) 37 38 layout = wx.GridSizer(0,0,0,0) 39 layout.Add(self.btn,flag=wx.ALIGN_CENTER) 40 self.SetSizer(layout) 41 42 self.__bind() 43 44 def __bind(self): 45 self.btn.Bind(wx.EVT_BUTTON, self.OnButton) 46 47 def OnButton(self, event): 48 self.parent.SetSize(360, 300) 49 self.parent.set_screen(APanel) 50 51if __name__ == '__main__': 52 53 application = wx.App() 54 frame = MeinFrame() 55 frame.Show() 56 application.MainLoop()

python

1#A.py 2import wx 3import wx.adv 4 5class APanel(wx.Panel): 6 def __init__(self, parent): 7 super().__init__(parent, wx.ID_ANY ) 8 self.parent=parent 9 self.parent.SetSize(360, 300) 10 self.Bind(wx.EVT_PAINT, self.on_paint) 11 self.cancelbutton = wx.Button(self, wx.ID_ANY, u"キャンセル") 12 self.Fit() 13 self.__set_properties() 14 self.__bind() 15 self.__do_layout() 16 17 def __set_properties(self): 18 self.cancelbutton.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, "")) 19 20 def __bind(self): 21 self.cancelbutton.Bind(wx.EVT_BUTTON, self.OnCancelButton) 22 23 def __do_layout(self): 24 sizer_1 = wx.GridSizer(0,0,0,0) 25 sizer_1.Add(self.cancelbutton, flag=wx.ALIGN_CENTER) 26 self.SetSizer(sizer_1) 27 self.Layout() 28 29 def OnCancelButton(self, event): 30 from menu import MenuPanel 31 self.parent.set_screen(MenuPanel) 32 33 def on_paint(self, event): 34 # establish the painting canvas 35 dc = wx.PaintDC(self) 36 x = 0 37 y = 0 38 w, h = self.GetSize() 39 dc.GradientFillLinear((x, y, w, h), 'red', 'yellow',nDirection= wx.BOTTOM ) 40 41

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問