나는 사용자 입력을 수집하고 검사하는 간단한 프로그램을 만들고 있습니다. 사용자 제공 입력이 검사에 실패한 경우 메시지 상자를 표시하는 것 외에도 입력 필드 오른쪽에 사용자에게 어떤 데이터 유형이 필요한지 알려주는 프롬프트 을 추가하고 싶습니다. wxPython : Show() 및 Hide() 사용
[(wx.StaticText, "이름"), (wx.TextCtrl, "여기에 사용자 입력"), (wx.StaticText을 다음 내가 구성된 단일 행 FlexGridSizer을 만든이 작업을 수행하려면 , "Input Guidance")]
"입력 유도"위젯이 숨겨져 있습니다. 사용자가 제공 한 필드에 아무 것도 입력하지 후 OK 버튼을 명중하면, 나는 세 가지가
- 필드 일어날하려는합니다 (문제
- "입력 지침"위젯에 사용자에게 경고하는 색상을 변경) 위의 행의 세 번째가 표시되었을 대화 상자가 자동으로
지금까지 난 단지 (1) 작동시킬 수 있고, 도움을 찾고 지금 눈에 보이는 위젯을 고려 크기가 조정됩니다
import wx
class Not_Empty(wx.PyValidator):
def __init__(self):
wx.PyValidator.__init__(self)
def Clone(self):
return Not_Empty()
################################################################################
def Validate(self, win):
""""""
evt_location = self.GetWindow()
val = evt_location.GetValue()
if val == "":
evt_location.SetBackgroundColour(wx.Color(250,200,230))
MyDialog().nameWarning_ST.Show(True)
return False
else:
return True
################################################################################
def TransferToWindow(self):
return True
def TransferFromWindow(self):
return True
class MyDialog(wx.Dialog):
def __init__(self):
wx.Dialog.__init__(self, parent=None, id=-1, title="Getting Input", style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
# Create field labels
name = wx.StaticText(self, -1, "Name")
# Create user-input widgets
name_TC = wx.TextCtrl(self, validator=Not_Empty())
# Create and hide warning boxes
self.nameWarning_ST = wx.StaticText(self, label="Field cannot be left empty", name="emptyAlert")
# to see what I want the dialog to look like AFTER the user has entered an
# empty string change 'False' to 'True' in the line below.
self.nameWarning_ST.Show(False)
# Create accept/cancel buttons
btns = self.CreateButtonSizer(flags=wx.OK|wx.CANCEL)
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
fgs = wx.FlexGridSizer(cols = 3, rows = 1)
fgs.AddMany([(name, -1, wx.ALL, 5), (name_TC, -1, wx.ALL, 5), (self.nameWarning_ST, -1, wx.ALL, 5)])
self.mainSizer.AddMany([(fgs, 1, wx.ALL, 0), (btns, 1, wx.ALL|wx.EXPAND, 5)])
self.SetSizer(self.mainSizer)
self.mainSizer.Fit(self)
if __name__ == '__main__':
app = wx.App()
dlg = MyDialog()
dlg.Center()
dlg.ShowModal()
dlg.Destroy()
app.MainLoop()
아래의 마이크의 응답을 얻은 코드는 개가 제공하는 아침 식사 중 일부입니다. Mike의 코드가 새롭고 개선 된 질문과 관련이 없다는 것을 의미하지만, 목표를 명확하게하기 위해 코드를 크게 수정했습니다. –