2013-10-06 1 views
1

저는 최근 Gtk + 3.x에서 Vala 프로그래밍 언어로 작업하기 시작했습니다. C#과 Visual Studio를 사용하여 많은 작업을 했었지만 이후 Linux로 옮겨 왔습니다.Gtk를 사용하는 대화 상자에서 사용자에게 어떻게 묻는가?

대화 상자에서 간단한 확인/취소 질문을 요청하려면 어떻게해야합니까? C#에서는 MessageBox.Show()에서 정말 쉽습니다. 그러나 Gtk는 복잡하고 복잡한 것처럼 보였습니다. 각각의 Google 검색을 통해 Dialogs 및 이벤트 처리기에 대한 기술적 인 혐오감이 들었습니다.

그냥 간단한 함수 있는가, 그래서 같은 것을 할 수있는 :

bool result = MessageBox.AskQuestion("Do you want to save?"); 

감사합니다,

배리 스미스 사실

+0

'Gtk.Dialog'가 도움이 될 수 있습니다 : http://valadoc.org/#!api=gtk+-3.0/Gtk.Dialog –

+0

여기 파이썬에서 관련된 질문입니다 : http://stackoverflow.com/questions/13970445/python-gtk3-how-to-add-a-gtk-entry-to-a-gtk-messagedialog –

답변

3

을, 시행 착오 ...

를 통해 그것을 발견
public bool show_question(string message, Gtk.Window window, MessageType mt) 
{ 
    Gtk.MessageDialog m = new Gtk.MessageDialog(window, DialogFlags.MODAL, mt, ButtonsType.OK_CANCEL, message); 
    Gtk.ResponseType result = (ResponseType)m.run(); 
    m.close(); 
    if (result == Gtk.ResponseType.OK) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
+1

'return result == Gtk.ResponseType.OK;를 써서 몇 줄을 저장할 수 있습니다. –

2

약간 개선 된 버전 :

public bool show_question(string primary_markup, 
          string? secondary_markup = null, 
          Gtk.Window? parent = null, 
          Gtk.MessageType message_type = Gtk.MessageType.QUESTION) 
{ 
    var m = new Gtk.MessageDialog.with_markup(parent, 
               Gtk.DialogFlags.MODAL, 
               message_type, 
               Gtk.ButtonsType.OK_CANCEL, 
               primary_markup); 
    m.format_secondary_markup(secondary_markup); 
    var result = (Gtk.ResponseType) m.run(); 
    m.destroy(); 
    return (result == Gtk.ResponseType.OK); 
} 

이 새 버전은 Vala의 기본 매개 변수를 사용하므로 가장 단순한 경우 show_question("Is this OK?");으로 전화하면됩니다. 또한, 당신은 또한 지금 예를 들어, 훨씬 좋네요보고 대화 상자를 생성하는 Pango Markup를 사용할 수 있습니다

show_question("<b><big>Overwrite File?</big></b>", 
       "<small>The file <i>\"%s\"</i> will be overwritten if you proceed</small>".printf(my_filename), 
       parent_window, 
       Gtk.MessageType.WARNING); 

그것은 그가 GTK 이와 같이 일반 "확인/취소"응답을 사용하는 것이 일반적으로 눈살을 찌푸리게한다 그러나 주목할 가치가있다. 그 대신 권장되는 것은 해당 동작과 관련된 동사를 포함하는 버튼 레이블을 사용하는 것입니다. 그래서 위의 예제에서 "Cancel"과 "Overwrite"가 훨씬 더 좋은 옵션이 될 것입니다 (물론 Cancel으로 기본값 설정). 이것은 프로그래머에게 조금 더 많은 작업을 요구하지만 더 나은 사용자 경험을 제공합니다.

관련 문제