피로곰's 모두의 프린터

최근에는 lxn/walk, lxn/win 등을 클론해서 따로 필요한 부분을 수정해서 깃헙에 올려두고 있습니다. walk 를 통한 윈도 GUI 프로그래밍을 조금 수월하게 하고자 walkmgr 이라는 패키지를 만들어 쓰고 있구요.. 이와 관련된건 이 1일1고 카테고리의 이전 글들에 간단히 강좌 비슷한 글을 작성해 두었으니 참고 하시구요 ..

이 walkmgr 은 제가 만드는 모두의 프린터, 모두의 PDF등을 비롯한 윈도 GUI 프로그래밍에 모두 사용되고 있는 패키지들 입니다.

기존 walkmgr에는 checkbox 는 제공을 하고 있었으나 walk 에서 제공하는 radio button 은 아직 지원을 하지 않고 있었습니다. 라디오 버튼을 잘 쓸일이 없었던 것도 있고 walkmgr 작업하기 귀찮아서 checkbox 로 라디오버튼 같은 식으로 쓰곤 했었는데.. 계속 그리 하다보니 매우 귀찮은지라 ㅎㅎ..

https://github.com/pirogom/walkmgr_example

 

GitHub - pirogom/walkmgr_example: walkmgr example project

walkmgr example project . Contribute to pirogom/walkmgr_example development by creating an account on GitHub.

github.com

walkmgr_example 라고 제가 깃헙에 올려둔 win, walk, walkmgr 을 이용해서 GUI 프로그래밍을 할 수 있는 예제를 올려둔게 있습니다.

이 예제에 radio_test.go 라는 파일을 예제로 추가해 두었습니다.

func TestRadio(t *testing.T) {
	wm := walkmgr.NewWin("RADIO BUTTON", 640, 480)

	// 라디오 버튼은 반드시 그룹박스로 묶어야 합니다.
	wm.HGroupBox("라디오 버튼 그룹")
	radio1 := wm.RadioButton("라디오1", int(10))
	radio2 := wm.RadioButton("라디오2", int(20))
	radio3 := wm.RadioButton("라디오3", int(30))
	wm.End()

	_ = radio1
	_ = radio2
	_ = radio3

	wm.PushButton("확인", func() {
		// 라디오 버튼들중 암놈이나 Group 으로
		// 라디오 버튼들을 관리하는 그룹을 통해서 체크된 버튼을 얻습니다.
		checkedBtn := radio1.Group().CheckedButton()

		if checkedBtn != nil {
			fmt.Print("체크된 버튼: ")
			fmt.Print(checkedBtn.Text())
			fmt.Print(" 값:")
			fmt.Println(checkedBtn.Value())
		}
	})

	wm.Start()
}

이렇게요 ..

일반적인 PushButton 이랑 비슷한 구조긴 한데 차이점이라면 라디오 버튼의 경우 여러 버튼들중 하나만 선택이 가능한 곳에 쓰입니다. 체크박스가 중복해서 여러가지 값을 선택 가능한 반면 보통 라디오 버튼은 여러 선택가능한 옵션중 단 하나만 선택이 가능한 차이점을 가집니다.

이렇게 말이죠..

그런 이유로 .. 라디오 버튼은 버튼이 몇개가 되던간에 하나의 그룹에 묶여 있어야 합니다. 그런 이유로 GroupBox, HGroupBox, VGroupBox 중 하나로는 반드시 감싼? 상태가 되어야 합니다. 

그래야 위 그림과 같이 하나의 선택이 유지되고 각 버튼들을 하나의 그룹으로 관리가 가능합니다.

또 다른 차이점은 .. LineEdit 같이 string 이나 int 같이 형 자체가 고정적이지 않고 SetValue 로 지정가능한 변수가 interface{} 형입니다. 원하는 데이터를 어느정도 맘대로?? 지정이 가능하긴 하겠습니다.

체크박스는 단순히 체크여부만 가지고 추가적인 설정이 필요하지만 .. 라디오 버튼은 인터페이스를 사용함으로 .. 좀더 다양한 사용이 가능할 것으로 보입니다.

이상입니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band