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

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

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

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

Q&A

解決済

1回答

1625閲覧

パネル1から値を取得し、パネル2にグラフを表示できない)(wxpython)

Ami_hamu

総合スコア4

Python

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

0グッド

0クリップ

投稿2020/08/29 15:37

前提・実現したいこと

wxPythonで、会計用GUIを作成しています。フレームの中に、パネルを二つ作り、一つ目のパネルに、買った商品名や金額をインプットするgrid を入れ、二つ目のパネルに、一つ目のパネルのgrid に入力された値を使って、折れ線グラフを入れたいです。

しかし、値をうまく取得できていないためか、二つ目のパネルにグラフが表示されません。何が問題なのか、どんなcodeならうまく出力されるのか教えてください。

該当のソースコード

import wx
import wx.grid
import matplotlib
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
app = wx.App()

class MainFrame(wx.Frame):
def init(self, parent, title):
super().init(parent, title = title, size = (600,600))
self.InNotebook()

def InNotebook(self):
nb = wx.Notebook(self)
nb.AddPage(Panel1(nb),"Input Values")
nb.AddPage(Panel2(nb),"Total Expense")
self.Centre()
self.Show(True)

class Panel1(wx.Panel):
def init(self, parent):
super(Panel1, self).init(parent)
grid = wx.grid.Grid(self)
grid.CreateGrid(5, 2)

grid.SetColLabelValue(0, "dates") grid.SetColLabelValue(1, "Prices") grid.SetCellValue(0, 0, "20,21,23") grid.SetCellValue(0, 1, "453,363,567" ) grid.AutoSize()

class Panel2(wx.Panel):

def __init__(self, parent): super(Panel2, self).__init__(parent) def GetValue(self): value_dates = self.grid.GetCellValue(self, 0, 0) value_prices = self.grid.GetCellValue(self, 0, 1) def Graph(self): value_dates = self.grid.GetCellValue(self, 0, 0) value_prices = self.grid.GetCellValue(self, 0, 1) figure = matplotlib.figure.Figure(self) self.canvas = FigureCanvasWxAgg(self, wx.ID_ANY, figure) self.plot1 = figure.add_subplot(211, xlabel='dates', ylabel='expense') self.plot1.plot(value_dates, value_prices, '-', color=clr[num%len(clr)], label='[$]') self.plot1.legend(loc='upper right') self.canvas.draw()

MainFrame(None, "Total Expense")
app.MainLoop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

共有する情報を引数で渡しましょう。
最初に共有しておいてもいいですし、タブ切り替え時やボタン押下時のメソッド呼び出し時に渡してもいいです。
最初に共有しておいて、タブ切り替え時にデータを表示する例を示します。
matplotlibの描画方法を知らないので、値を取得してprintするだけにしてあります。

python

1import wx 2import wx.grid 3import matplotlib 4from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg 5app = wx.App() 6 7class MainFrame(wx.Frame): 8 def __init__(self, parent, title): 9 super().__init__(parent, title = title, size = (600,600)) 10 self.InNotebook() 11 12 def InNotebook(self): 13 nb = wx.Notebook(self) 14 panel1 = Panel1(nb) 15 panel2 = Panel2(nb, panel1.grid) 16 nb.AddPage(panel1,"Input Values") 17 nb.AddPage(panel2,"Total Expense") 18 nb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, lambda event: panel2.Graph()) 19 self.Centre() 20 self.Show(True) 21 22class Panel1(wx.Panel): 23 def __init__(self, parent): 24 super().__init__(parent) 25 grid = self.grid = wx.grid.Grid(self) 26 grid.CreateGrid(5, 2) 27 28 grid.SetColLabelValue(0, "dates") 29 grid.SetColLabelValue(1, "Prices") 30 31 grid.SetCellValue(0, 0, "20,21,23") 32 grid.SetCellValue(0, 1, "453,363,567" ) 33 34 grid.AutoSize() 35 36class Panel2(wx.Panel): 37 def __init__(self, parent, grid): 38 super().__init__(parent) 39 self.grid = grid 40 41 def Graph(self): 42 value_dates = self.grid.GetCellValue(0, 0) 43 value_prices = self.grid.GetCellValue(0, 1) 44 print(value_dates) 45 print(value_prices) 46 47MainFrame(None, "Total Expense") 48app.MainLoop()

投稿2020/08/29 18:01

編集2020/08/29 22:49
shiracamus

総合スコア5406

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問