私はPython言語の初心者です。私はwxpythonを使用して私のプログラムのための簡単なGUIを作ろうとしています。私のguiはフレームと2つのタブ(wxPanelを使用)で構成されています(タブ1とタブ2)。私はタブ1とタブ2の両方にtxtctrlウィジェットを配置しました。タブ1では、すべてのtxtctrl値を取得し、対応する変数に割り当てるボタンを配置しました。私の問題は、私はタブ1パネルに配置され、タブ1の変数に割り当てるtxtctrlsから値を取得できますが、タブ2パネルにあるtxtctrlsから値を取得することはできず、タブ1パネルで使用します私はタブ2のパネルから値を取得し、それらをタブ1のパネルの変数に割り当てる必要があります。)この問題を解決してコードを実行するのを手伝ってください。クリックすると、パネル2のデータはパネル1のフィールドにコピーされますか?
私は多くのサイトを検索し、フレームやクラス間のデータ転送に関するサンプルを読んで適用しようとしましたが、それでも動作させることはできませんでした。
ここは私のGUIコードです。すでにメインフレームでそれを作成したとき
from wxPython.wx import *
import os
class PageOne(wxPanel):
def __init__(self, parent):
wxPanel.__init__(self, parent)
self.SetBackgroundColour("gray")
self.tc1=wxTextCtrl(self, -1, '', (110, 15), (120, -1))
self.tc2=wxTextCtrl(self, -1, '', (110, 15), (120, -1))
self.tc3=wxTextCtrl(self, -1, '', (110, 15), (120, -1))
self.st1=wxStaticText(self, -1, "input", pos=(10, 12))
self.st2=wxStaticText(self, -1, "X:", pos=(10, 12))
self.st3=wxStaticText(self, -1, "Y:", pos=(10, 12))
self.st4=wxStaticText(self, -1, "Z:", pos=(10, 12))
#flexgrid
self.fgs = wxFlexGridSizer(1, 7, 9, 10)
self.fgs.AddMany([(self.st1, 1, wxEXPAND),(self.st2, 1, \
wxEXPAND),(self.tc1, 1,wxEXPAND),(self.st3, 1, wxEXPAND),\
(self.tc2, 1, wxEXPAND),(self.st4, 1, wxEXPAND),(self.tc3, 1,\
wxEXPAND)])
# statik text
self.hsizer1 = wxBoxSizer(wxHORIZONTAL)
self.hsizer2 = wxBoxSizer(wxHORIZONTAL)
self.vsizerb = wxBoxSizer(wxVERTICAL)
self.hsizer1.Add(self.fgs, 1, wxEXPAND |wxALIGN_CENTER| wxALL,1)
self.but1=wxButton(self, 1, 'Calculate', (10, 10))
self.but1.Bind(EVT_BUTTON, self.Create_OnClick)
self.hsizer2.Add(self.but1, 1, wxALIGN_CENTER)
self.vsizerb.Add(self.hsizer1, 1.8, wxEXPAND | wxALL, 10)
self.vsizerb.Add(self.hsizer2, 0.2, wxEXPAND | wxALL, 10)
self.SetSizer(self.vsizerb)
self.PTWO=PageTwo(self)
self.PTWO.Show()
def Create_OnClick(self, event):
text1=self.tc1.GetValue()
text2=self.tc2.GetValue()
text3=self.tc3.GetValue()
#here I want to get pt2_1 value from tab2 panel and assign it
#to text4 varibale.
#on the gui, if you fill all txtcrtl boxes and press calculate
#button, it gives values of text3 and text4 on cmd.
#I can get text3 value but cannot get text4 value.It gives null?
text4=self.PTWO.pt2_1.GetValue()
print "text_fromtab2:",text4,"text_fromtab1:",text3
yer=os.getcwd()
class PageTwo(wxPanel):
def __init__(self, parent):
wxPanel.__init__(self, parent)
self.SetBackgroundColour("gray")
self.hsizerb = wxBoxSizer(wxHORIZONTAL)
self.st5=wxStaticText(self, -1, "Input 1 (mm)", pos=(10, 12))
# I want to be able to get these values from PageOne
self.pt2_1=wxTextCtrl(self, -1, '', (110, 15), (120, -1))
self.fgs_pt2 = wxFlexGridSizer(1, 2, 10, 10)
self.fgs_pt2.AddMany([(self.st5, 1, wxEXPAND),(self.pt2_1, 1,\
wxEXPAND)])
self.hsizerb.Add(self.fgs_pt2, 1, wxEXPAND |wxALIGN_CENTER| \
wxALL, 10)
self.SetSizer(self.hsizerb)
class MainFrame(wxFrame):
def __init__(self, parent, fid, title):
wxFrame.__init__(self, parent, fid, title, \
pos = (200, 50), \
size = (500, 200), \
style = wxDEFAULT_FRAME_STYLE \
|wxNO_FULL_REPAINT_ON_RESIZE)
panel1 = wxPanel(self, -1)
panel1.SetBackgroundColour("blue")
nb = wxNotebook(panel1)
page1 = PageOne(nb)
page2 = PageTwo(nb)
nb.AddPage(page1, "Tab 1")
nb.AddPage(page2, "Tab 2")
sizer = wxBoxSizer(wxVERTICAL)
sizer.Add(nb, 1, wxALL|wxALIGN_CENTER|wxEXPAND, 1)
panel1.SetSizer(sizer)
panel1.SetAutoLayout(True)
self.Show(True)
if __name__ == "__main__":
app = wxPySimpleApp()
frame = MainFrame(None, wxID_ANY, "MY PROGRAM")
app.MainLoop()
不要なコードを削除して、より簡単な例を作成してください。 Panel.field1のクリック時の値はpanel2.field2にコピーする必要がありますか? –
Anurag、あなたの助言に感謝します。あなたが示唆したように、私は不要なコードを削除しようとし、それを簡単にしました。 –