2016-06-04 7 views
0

Ich werde eine einfache Benutzeroberfläche erstellen, die eine Schaltfläche hat, die einen Wert steuert, und wenn Benutzer darauf klicken, erscheint eine vscale in einem neuen Fenster oder Dialogfeld oder Box und so um den Wert mit der Skalierung einzustellen. gibt es ein Beispiel für ein solches Programm? Ich bin googled und finde einige Beispiele, aber sie stellen Farbe ein und der Dialog hat Funktionen für Schriftartauswahl und .... Win 7_64 bit, gtk3.4.2, Visual C++ GrüßeWie Skalierung in Antwort der Schaltfläche für gtk +

+0

Sie könnten nur schaffen 'GtkDialog' den Maßstab zu seinem Inhaltsbereich hinzufügen, einige Schaltflächen hinzufügen und ausführen. Vergessen Sie nicht, den Wert der Skala abzurufen, bevor Sie den Dialog zerstören, sonst ist er für immer verloren. – B8vrede

+0

Haben Sie ein Beispiel? –

+0

Ich bin eher ein Python-Typ, also kann ich Ihnen nur ein Beispiel in Python geben :) – B8vrede

Antwort

0

Hier ist der Code:

#include <gtk/gtk.h> 

void value_changed(GtkRange *range, gpointer win) { 

gdouble val = gtk_range_get_value(range); 
gchar *str = g_strdup_printf("%.f", val);  
gtk_label_set_text(GTK_LABEL(win), str); 

g_free(str); 
} 

void value(GtkRange *range, gpointer win) 
{ 

GtkWidget *halign; 
GtkWidget *hbox; 
GtkWidget *hscale; 
GtkWidget *label; 

GtkWidget *content_area, *label1; 
GtkWidget * dia = gtk_dialog_new(); 
content_area = gtk_dialog_get_content_area (GTK_DIALOG (dia)); 


    hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,FALSE); 

    hscale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0, 100, 1); 
gtk_scale_set_draw_value(GTK_SCALE(hscale), FALSE); 
gtk_widget_set_size_request(hscale, 150, -1); 
label = gtk_label_new("..."); 
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1); 

gtk_box_pack_start(GTK_BOX(hbox), hscale, FALSE, FALSE, 0); 
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 

halign = gtk_alignment_new(0, 0, 0, 0); 


gtk_container_add(GTK_CONTAINER(halign), hbox); 
gtk_container_add(GTK_CONTAINER(content_area), halign); 



g_signal_connect(hscale, "value-changed", 
    G_CALLBACK(value_changed), label);  


label1 = gtk_label_new ("YA ali"); 

gtk_container_add (GTK_CONTAINER (content_area), label1); 
gtk_widget_show_all (dia); 

    } 


int main(int argc, char *argv[]) { 

GtkWidget *window; 
GtkWidget *halign; 
GtkWidget *hbox; 
GtkWidget *hscale; 
GtkWidget *label; 


GtkWidget *table; 
GtkWidget *btn; 

gtk_init(&argc, &argv); 

window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); 
gtk_window_set_default_size(GTK_WINDOW(window), 300, 250); 
gtk_container_set_border_width(GTK_CONTAINER(window), 10); 
gtk_window_set_title(GTK_WINDOW(window), "GtkHScale"); 

btn = gtk_button_new(); 
table = gtk_table_new(10,10,TRUE); 
gtk_table_set_row_spacings(GTK_TABLE(table), 10); 
gtk_table_set_col_spacings(GTK_TABLE(table), 10); 

gtk_table_attach_defaults(GTK_TABLE(table),btn,2,4,4,6); 
gtk_container_add(GTK_CONTAINER(window), table); 




g_signal_connect(G_OBJECT(btn), "clicked", 
    G_CALLBACK(value), G_OBJECT(window)); 

g_signal_connect(window, "destroy", 
    G_CALLBACK(gtk_main_quit), NULL); 


gtk_widget_show_all(window); 

gtk_main(); 

return 0; 
}