按下按钮后,我想在按钮下方的窗口中显示文本。我可以将文本写入控制台,但不能将其写入窗口。代码的第28行。 请给我一个建议。 谢谢。
编辑: 还有一个问题: 我想通过GTK Entry输入数字值,并通过我的def faktorial(f)输入阶乘。如何在Okno类中调用此def,并使用命令print在代码行34上打印结果?
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()
答案 0 :(得分:0)
您可以在按钮下方添加新的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()