LINUX.ORG.RU

pygtk обработка флагов

 , обработка флагов


0

1

Обьясните на примере, как правильно обрабатывать флаги, я новичек в питоне, всю ночь просидел, в итоге не чего не работает, совсем запутался.

Нужно, что бы если флаги не выбраны, то при нажатии кнопки, в консоле печатался текст «Выбраны команды:», если выбран первый флаг и нажата кнопка то печаталось «Выбраны команды: 1» (для второго флага аналогично, вместо единицы - двойка), а если выбраны оба флага и нажата кнопка, то выводилось «Выбраны команды: 1 2» - как это сделать?

Код, который не работает так как хотелось бы:

#!/usr/bin/env python
# --*-- coding:utf-8 --*--
# example togglebutton.py

import gtk
import pango
import os

command1 = "1"
command2 = "2"
commands = "Выбраны команды: "

class PyApp(gtk.Window):
    def __init__(self):
        super(PyApp, self).__init__()
        self.set_title("Тест")
        self.set_position(gtk.WIN_POS_CENTER)
        self.set_size_request(190, 150)
        self.set_resizable(False)                
        
        button1 = gtk.CheckButton("Первый флаг")
        button1.set_active(False)
        button1.unset_flags(gtk.CAN_FOCUS)
        button1.connect("clicked", self.on_clicked1)
        
        button2 = gtk.CheckButton("Второй флаг")
        button2.set_active(False)
        button2.unset_flags(gtk.CAN_FOCUS)
        button2.connect("clicked", self.on_clicked2)
        
        button3 = gtk.Button("Напечатать команды")
        button3.set_size_request(150, 30)
        button3.connect("clicked", self.on_clicked3)        
        
        fixed = gtk.Fixed()
        fixed.put(button1, 20, 20)
        fixed.put(button2, 20, 50)
        fixed.put(button3, 20, 80)

        self.connect("destroy", gtk.main_quit)
        self.add(fixed)
        self.show_all()

    def on_clicked1(self, widget):
        if widget.get_active():
            commands+command1
        else:
           commands
           
    def on_clicked2(self, widget):
        if widget.get_active():
            commands+command2
        else:
           commands
           
    def on_clicked3(self, widget):
        print commands

PyApp()
gtk.main()

Более того on_clicked1/2 как бы и не нужны. Состояния чекбоксов можно опросить когда они действительно понадобятся.

baverman ★★★
()
Ответ на: комментарий от baverman

А как сделать что бы изменяли/нялось?

lorovec
() автор топика
Ответ на: комментарий от lorovec

Использовать абсолютное расположение виджетов — моветон. Учи менеджеры компоновки вроде VBox HBox и Table.

fat_angel ★★★★★
()

Так работает:

#!/usr/bin/env python
# --*-- coding:utf-8 --*--
# example togglebutton.py

import gtk
import pango
import os

command1 = "1"
command2 = "2"

button1 = gtk.CheckButton("Первый флаг")
button2 = gtk.CheckButton("Второй флаг")

class PyApp(gtk.Window):
    def __init__(self):
        super(PyApp, self).__init__()
        self.set_title("Тест")
        self.set_position(gtk.WIN_POS_CENTER)
        self.set_size_request(190, 150)
        self.set_resizable(False)                
        
        
        button1.set_active(False)
        button1.unset_flags(gtk.CAN_FOCUS)
        button1.connect("clicked", self.on_clicked1)
        
        
        button2.set_active(False)
        button2.unset_flags(gtk.CAN_FOCUS)
        button2.connect("clicked", self.on_clicked2)
        
        button3 = gtk.Button("Напечатать команды")
        button3.set_size_request(150, 30)
        button3.connect("clicked", self.on_clicked3)        
        
        fixed = gtk.Fixed()
        fixed.put(button1, 20, 20)
        fixed.put(button2, 20, 50)
        fixed.put(button3, 20, 80)

        self.connect("destroy", gtk.main_quit)
        self.add(fixed)
        self.show_all()

    def on_clicked1(self, widget):
        if widget.get_active():
            print "1 yes"
        else:
           print "1 no"
           
    def on_clicked2(self, widget):
        if widget.get_active():
            print "2 yes"
        else:
           print "2 no"
           
    def on_clicked3(self, widget):
        com = ""
        commands = "Выбраны команды: "
        if button1.get_active():
           commands+=command1
        if button2.get_active():
           commands+=command2
        print commands

PyApp()
gtk.main()

lorovec
() автор топика
Ответ на: комментарий от lorovec

Посмотри на Glade, и GtkBuilder, позволяет мышкой рисовать интерфейс, и не нужно делать такие простыни абсолютного позициирования.

mono ★★★★★
()

как-то так

#! /usr/bin/python

import gtk

def print_cmd (w):
    text = "selected:"
    if (c1.get_active()):
        text += " 1"
    if (c2.get_active()):
        text += " 2"
    print text

win = gtk.Window()
win.connect("delete_event", gtk.main_quit)

box = gtk.VBox()
win.add(box)

c1 = gtk.CheckButton("first")
box.pack_start(c1)

c2 = gtk.CheckButton("second")
box.pack_start(c2)

b = gtk.Button("print")
b.connect("clicked", print_cmd)
box.pack_start(b)

win.show_all()
gtk.main()

питонизмы напихаешь сам

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.