最初的目标是降低框架的高度以隐藏其下半部分。只要区域中仍有活动的小部件,这似乎不起作用。所以我使用'visible'属性来隐藏这些小部件,使用'height_request'来管理框架的高度。声明
self.frSaisie.set_property('height_request', 160)
(启动代码部分和回调部分)完全不起作用。我甚至试图隐藏盒子......仍然没有结果。 此外,屏蔽通过CheckButton激活(但不是调整大小)时有效,但在启动应用程序时(代码底部)不会考虑屏蔽。 如果有人有想法,请提前感谢。 对不起代码长度。
import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk
class Appli(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, window_position = 1)
self.connect('delete-event', Gtk.main_quit)
# wid actifs
etNom = Gtk.Entry()
etPrenom = Gtk.Entry()
btValider = Gtk.Button('Valider')
btEnregistrer = Gtk.Button('Enregistrer')
btSupprimer = Gtk.Button('Supprimer')
btEffacer = Gtk.Button('Effacer')
self.ckGerer = Gtk.CheckButton('Gérer...', margin = 12)
self.ckGerer.connect('toggled', self.Gerer)
# wid container
gdIdentite = Gtk.Grid(margin = 6)
self.gdFonctions = Gtk.Grid(margin = 6, halign = 3, row_spacing = 6, column_spacing = 6)
self.frSaisie = Gtk.Frame(label = ' Saisie ', margin = 6, height_request = 400)
# Remplissage Grid
gdIdentite.attach(Gtk.Label('Nom', xalign = 1,margin_right = 6),0,0,1,1)
gdIdentite.attach(etNom,1,0,1,1)
gdIdentite.attach(Gtk.Label('Prénom', xalign = 1,margin_right = 6),0,1,1,1)
gdIdentite.attach(etPrenom,1,1,1,1)
self.gdFonctions.attach(btValider,0,0,1,1)
self.gdFonctions.attach(btEnregistrer,1,0,1,1)
self.gdFonctions.attach(btSupprimer,0,1,1,1)
self.gdFonctions.attach(btEffacer,1,1,1,1)
# Remplissage Box + Frame
self.bxSaisie = Gtk.Box(orientation = Gtk.Orientation(1))
self.bxSaisie.pack_start(gdIdentite, False, False, 0)
self.bxSaisie.pack_start(self.ckGerer, False, False, 0)
self.bxSaisie.pack_start(self.gdFonctions, True, True, 0)
self.frSaisie.add(self.bxSaisie)
self.add(self.frSaisie)
# Start
self.gdFonctions.set_property('visible', False) # not running at start
self.frSaisie.set_property('height_request', 160) # never running
self.show_all()
def Gerer(self, etat):
if self.ckGerer.get_active():
self.gdFonctions.set_property('visible', True)
else:
self.gdFonctions.set_property('visible', False) # running
self.frSaisie.set_property('height_request', 160) # never running
Appli()
Gtk.main()
答案 0 :(得分:2)
最好调整顶部窗口的大小:
def Gerer(self, etat):
if self.ckGerer.get_active():
self.gdFonctions.set_property('visible', True)
else:
self.gdFonctions.set_property('visible', False) # running
self.resize(50, 50) # never running
答案 1 :(得分:0)
最后,我使用Gtk.AspectFrame小部件解决了这个问题。这种行为是我的预期。 我取代了框架的声明:
self.frSaisie = Gtk.Frame(label = ' Saisie ', margin = 6, height_request = 300)
通过
self.frSaisie = Gtk.AspectFrame(label = ' Saisie ', margin = 6, \
height_request = 100, yalign = 0.001)
我稍微修改了回调以简化操作。
但是,我仍然不明白为什么这种格式 - 现在由函数femMini触发 - 不适用于启动。 如果有人可以向我解释......提前谢谢你
class Appli(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, window_position = 1, height_request = 400)
self.connect('delete-event', Gtk.main_quit)
# wid actifs
etNom = Gtk.Entry()
etPrenom = Gtk.Entry()
btValider = Gtk.Button('Valider')
btEnregistrer = Gtk.Button('Enregistrer')
btSupprimer = Gtk.Button('Supprimer')
btEffacer = Gtk.Button('Effacer')
self.ckGerer = Gtk.CheckButton('Gérer...', margin = 12)
self.ckGerer.connect('toggled', self.Gerer)
# wid container
gdIdentite = Gtk.Grid(margin = 6)
self.gdFonctions = Gtk.Grid(margin = 6, halign = 3, row_spacing = 6, column_spacing = 6)
#self.frSaisie = Gtk.Frame(label = ' Saisie ', margin = 6, height_request = 300)
self.frSaisie = Gtk.AspectFrame(label = ' Saisie ', margin = 6, \
height_request = 100, yalign = 0.001)
# Remplissage Grid
gdIdentite.attach(Gtk.Label('Nom', xalign = 1,margin_right = 6),0,0,1,1)
gdIdentite.attach(etNom,1,0,1,1)
gdIdentite.attach(Gtk.Label('Prénom', xalign = 1,margin_right = 6),0,1,1,1)
gdIdentite.attach(etPrenom,1,1,1,1)
self.gdFonctions.attach(btValider,0,0,1,1)
self.gdFonctions.attach(btEnregistrer,1,0,1,1)
self.gdFonctions.attach(btSupprimer,0,1,1,1)
self.gdFonctions.attach(btEffacer,1,1,1,1)
# Remplissage Box + Frame
self.bxSaisie = Gtk.Box(orientation = Gtk.Orientation(1))
self.bxSaisie.pack_start(gdIdentite, False, False, 0)
self.bxSaisie.pack_start(self.ckGerer, False, False, 0)
self.bxSaisie.pack_start(self.gdFonctions, True, True, 0)
self.frSaisie.add(self.bxSaisie)
self.add(self.frSaisie)
# Start
self.fenMini()
self.show_all()
# Méthodes
def fenMini(self):
self.gdFonctions.set_property('visible', False)
self.frSaisie.set_property('height_request', 120)
def fenMaxi(self):
self.gdFonctions.set_property('visible', True)
# Callbacks
def Gerer(self, etat):
if self.ckGerer.get_active():
self.fenMaxi()
else:
self.fenMini()
Appli()
Gtk.main()