개요
사용자로부터 한 줄 짜리 텍스트를 입력받는 텍스트입력다이얼로그(wx.TextEntryDialog)를 제작해보자. 다이얼로그는 대화상자 형태로 별도의 창이 열리게 되고 텍스트 입력란과 OK 혹은 Cancel 버튼을 놓을 수 있다.
wx.TextEntryDialog
텍스트입력다이얼로그(wx.TextEntryDialog)는 가장 간단한 텍스트 입력 양식을 가진 대화상자형 위젯이다. 대부분의 다른 wxPython 위젯들과 마찬가지로 선언 양식은 아래와 같고, style의 경우 버튼(wx.Button)에 대한 스타일(wx.OK, wx.CANCEL)과 텍스트컨트롤(wx.TextCtrl)에 대한 스타일을 지정할 수 있다.
modal = wx.TextEntryDialog(parent, message, caption="Caption",
value="", style=0, pos=wx.DefaultPosition)
parent: 부모 오브젝트, 보통 None으로 둔다.
message: 사용자에게 전달할 메시지. 메시지 아래 위치하는 텍스트컨트롤에 대한 설명 등을 적어두면 좋다.
caption: 대화상자 제목
value: 텍스트컨트롤의 기본값이다. 사용자가 입력하지 않아도 미리 입력되어 있다.
pos: 대화상자가 놓일 화면상의 위치 좌표값이다. (x,y)
만약 사용자 입력값을 항상 대문자로만 받아야 하는 경우 modal에 ForceUpper()메소드를 실행할 수도 있다. ForceUpper()가 동작하는 경우, 텍스트 컨트롤에는 대문자만 입력된다.
예제
버튼을 누르면 대화상자가 열리고, 텍스트컨트롤(wx.TextCtrl)에 아무 값이나 입력하면 버튼 레이블과 색상이 변경되는 예제이다.
import wx
class TextEntryDialogExample(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,title="TextEntryDialogExample Window", size=(500,300))
# ID는 생략해도 됩니다
panel = wx.Panel(self)
# 수평 박스사이저
hsizer = wx.BoxSizer(wx.HORIZONTAL)
# 수직 박스사이저
vsizer = wx.BoxSizer(wx.VERTICAL)
self.btn = wx.Button(panel, -1, label="누르면 대화상자가 열려요", size=(200,60))
# 수평 박스사이저 가운데에 패널 놓기
hsizer.Add((0,0), 1) # 박스사이저에 아이템 등록, 더미(dummy)로 (0,0)을 등록하고, 비율을 1로 설정한다
hsizer.Add(self.btn, 1)
hsizer.Add((0,0), 1)
# 수직 박스사이저 가운데에 수평 박스사이저 놓기
vsizer.Add((0, 0), 1)
vsizer.Add(hsizer,0)
vsizer.Add((0,0), 1)
# 패널에 수직 박스사이저 삽입
panel.SetSizer(vsizer)
self.Bind(wx.EVT_BUTTON, self.OnButtonClicked, self.btn)
# 버튼 클릭시 작동
def OnButtonClicked(self, event):
# 텍스트 입력 다이얼로그
modal = wx.TextEntryDialog(None, "아무 글자나 입력해보세요:)\n버튼 레이블이 바뀝니다.", "예제", "(기본값)")
# OK를 클릭하면 동작
if modal.ShowModal()==wx.ID_OK:
# 사용자가 입력한 값 얻기
answer=modal.GetValue()
# 버튼 레이블 텍스트 변경
self.btn.SetLabel(answer)
# 버튼 글자색 변경
self.btn.SetForegroundColour(wx.RED)
# 버튼 배경색 변경
self.btn.SetBackgroundColour(wx.BLACK)
# 대화상자 제거
modal.Destroy()
else: # cancel
pass
if __name__=="__main__":
app = wx.App()
frame=TextEntryDialogExample(parent=None, id=-1)
frame.Show()
frame.Center()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
'wxPython' 카테고리의 다른 글
파이썬 GUI, 스핀컨트롤 wx.SpinCtrl (0) | 2023.02.25 |
---|---|
파이썬 GUI, 메시지 다이얼로그 wx.MessageDialog (0) | 2023.02.25 |
파이썬 GUI, 창 움직임 트래킹 Frame Movement Tracking (0) | 2023.02.22 |
파이썬 GUI, 싱글초이스다이얼로그 wx.SingleChoiceDialog (0) | 2023.02.22 |
파이썬 GUI, 체크박스 생성 후 이벤트 연결하기 (0) | 2023.02.22 |