Показать текст в окне после нажатия кнопки - PullRequest
1 голос
/ 08 ноября 2019

После нажатия кнопки я хочу отобразить текст в окне под кнопкой. Я могу записать текст в консоль, но не могу записать его в окно. Строка 28 кода. Пожалуйста, дайте мне совет. Спасибо.

Редактировать: Еще один вопрос: я хочу ввести числовое значение по GTK Entry и подсчитать факториал по моему фактору def (f). Как я могу вызвать это определение внутри класса Okno и вывести результат в строке кода 34 командой print?


import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class Okno(Gtk.Window):
        def __init__(self):
            Gtk.Window.__init__(self, title="Button Demo")

            pozice = Gtk.Grid()
            self.add(pozice)

            #textnad oknem
            self.vstup1 = Gtk.Label()
            self.vstup1.set_text("Před textem")
            pozice.attach(self.vstup1, 10,10,10,10)

            # okno se vstupem
            self.vstup = Gtk.Entry()
            self.vstup.set_text("Můj vstupní text")
            pozice.attach(self.vstup, 10,20,10,10)

            #tlačítko potvrď
            tlacitko = Gtk.Button.new_with_label("klikni")
            tlacitko.connect("clicked", self.kliknuto)
            pozice.attach(tlacitko, 10,30,10,10)

            self.label = Gtk.Label()
            pozice.attach(self.label, 10,40,10,10)

        def kliknuto(self, tlacitko):
            self.label.set_text("kliknuto")
            vystup = self.vstup.get_text() #získá obsah vstupu Entry
            self.label.set_text(vystup) #vypíše text do okna
            print(faktorial(vstup))


        def faktorial(f):
            """ vypočítá faktoriál celého čísla """
            vysledek = 1
            while f > 0:
                vysledek = vysledek * f
                f = f - 1
            return vysledek

okno = Okno()
okno.connect("destroy", Gtk.main_quit)
okno.show_all()
Gtk.main()

1 Ответ

0 голосов
/ 08 ноября 2019

Вы можете добавить новый Gtk.Label под кнопкой и устанавливать текст при каждом нажатии кнопки.

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class Okno(Gtk.Window):
        def __init__(self):
            Gtk.Window.__init__(self, title="Button Demo")

            pozice = Gtk.Grid()
            self.add(pozice)

            #textnad oknem
            self.vstup1 = Gtk.Label()
            self.vstup1.set_text("Před textem")
            pozice.attach(self.vstup1, 10,10,10,10)

            # okno se vstupem
            self.vstup = Gtk.Entry()
            self.vstup.set_text("Můj vstupní text")
            pozice.attach(self.vstup, 10,20,10,10)

            #tlačítko potvrď
            tlacitko = Gtk.Button.new_with_label("klikni")
            tlacitko.connect("clicked", self.kliknuto)
            pozice.attach(tlacitko, 10,30,10,10)

            self.label = Gtk.Label()
            pozice.attach(self.label, 10,40,10,10)

        def kliknuto(self, tlacitko, pozice=()):
            self.label.set_text("kliknuto")

okno = Okno()
okno.connect("destroy", Gtk.main_quit)
okno.show_all()
Gtk.main()

Если вы хотите добавлять текст в список при каждом нажатииКнопка и отображение записей, вы можете добавить свой текст в модель Gio.ListStore и связать его с экземпляром Gtk.ListBox и функцией, создающей Gtk.Label каждый раз, когда вы нажимаете на кнопку. Смотрите ниже:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject, Gio


class Okno(Gtk.Window):
        def __init__(self):
            Gtk.Window.__init__(self, title="Button Demo")

            pozice = Gtk.Grid()
            self.add(pozice)

            #textnad oknem
            self.vstup1 = Gtk.Label()
            self.vstup1.set_text("Před textem")
            pozice.attach(self.vstup1, 10,10,10,10)

            # okno se vstupem
            self.vstup = Gtk.Entry()
            self.vstup.set_text("Můj vstupní text")
            pozice.attach(self.vstup, 10,20,10,10)

            #tlačítko potvrď
            tlacitko = Gtk.Button.new_with_label("klikni")
            tlacitko.connect("clicked", self.kliknuto)
            pozice.attach(tlacitko, 10,30,10,10)

            self.listbox = Gtk.ListBox()
            self.liststore = Gio.ListStore()
            self.listbox.bind_model(self.liststore, self.create_widget_func)
            pozice.attach(self.listbox, 10,40,10,10)

        def kliknuto(self, tlacitko, pozice=()):
            obj = My_Obj("kliknuto")
            self.liststore.append(obj)

        def create_widget_func(self, i):
            return Gtk.Label(label = i.my_text)

class My_Obj(GObject.GObject):
    my_text = GObject.Property(type = str)

    def __init__(self, my_text):
        GObject.GObject.__init__(self)
        self.my_text = my_text

okno = Okno()
okno.connect("destroy", Gtk.main_quit)
okno.show_all()
Gtk.main()
...