나는 파이썬 언어의 초보자이며 wxpython을 사용하여 내 프로그램을위한 간단한 GUI를 만들려고 노력 중이다. 내 GUI는 프레임과 두 개의 탭 (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()
예를 들어 불필요한 코드를 잘라내어 간단한 예를 작성하면 더 좋을 것입니다. on panel.field1의 click 값을 panel2.field2에 복사해야합니까? –
Anurag, 조언 해 주셔서 감사합니다. 당신이 제안했듯이, 나는 불필요한 코드를 지우려고하고 더 간단하게 만들었다. –