Python 如何禁用定义了页面标题的GTK辅助侧栏?

Python 如何禁用定义了页面标题的GTK辅助侧栏?,python,gtk,glade,Python,Gtk,Glade,当我定义一个页面标题时,会自动出现一个GTKAsistant侧边栏 GtkAssistant不接受窗口标题。您需要定义页面标题,但它会启用该侧栏 我只想要页面标题。例如: 考虑到这个例子,我想保留“错误详细信息”标题,但隐藏侧栏。这对我没用。没有Gtk文档提到要删除这个。不知道我能不能 林间空地的一个例子: <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.22.1 --> <in

当我定义一个页面标题时,会自动出现一个GTKAsistant侧边栏

GtkAssistant不接受窗口标题。您需要定义页面标题,但它会启用该侧栏

我只想要页面标题。例如:

考虑到这个例子,我想保留“错误详细信息”标题,但隐藏侧栏。这对我没用。没有Gtk文档提到要删除这个。不知道我能不能

林间空地的一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.2"/>
  <object class="GtkAssistant" id="assistant">
    <property name="can_focus">False</property>
    <property name="use_header_bar">0</property>
    <signal name="cancel" handler="on_destroy" swapped="no"/>
    <signal name="close" handler="on_destroy" swapped="no"/>
    <signal name="delete-event" handler="on_destroy" swapped="no"/>
    <child>
      <object class="GtkBox" id="page1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="margin_left">7</property>
        <property name="margin_right">7</property>
        <property name="margin_top">7</property>
        <property name="margin_bottom">7</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">Name:</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">Surname:</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">3</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="page_type">intro</property>
        <property name="title" translatable="yes">User Info</property>
        <property name="has_padding">False</property>
      </packing>
    </child>
    <child>
      <object class="GtkBox" id="page2">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="margin_left">7</property>
        <property name="margin_right">7</property>
        <property name="margin_top">7</property>
        <property name="margin_bottom">7</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">Address:</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">Telephone:</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">3</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="title" translatable="yes">Extra Info</property>
        <property name="has_padding">False</property>
      </packing>
    </child>
    <child>
      <object class="GtkBox" id="page3">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <placeholder/>
        </child>
        <child>
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">Thanks for registering!</property>
            <attributes>
              <attribute name="weight" value="bold"/>
              <attribute name="scale" value="1.5"/>
            </attributes>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
      <packing>
        <property name="page_type">summary</property>
        <property name="title" translatable="yes">Success</property>
        <property name="has_padding">False</property>
      </packing>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
  </object>
</interface>

错误的
0
符合事实的
错误的
7.
7.
7.
7.
竖的
符合事实的
错误的
姓名:
错误的
符合事实的
0
符合事实的
符合事实的
错误的
符合事实的
1.
符合事实的
错误的
姓:
错误的
符合事实的
2.
符合事实的
符合事实的
错误的
符合事实的
3.
简介
用户信息
错误的
符合事实的
错误的
7.
7.
7.
7.
竖的
符合事实的
错误的
地址:
错误的
符合事实的
0
符合事实的
符合事实的
错误的
符合事实的
1.
符合事实的
错误的
电话:
错误的
符合事实的
2.
符合事实的
符合事实的
错误的
符合事实的
3.
额外信息
错误的
符合事实的
错误的
竖的
符合事实的
错误的
谢谢注册!

我想删除这个奇怪的侧栏

问题:如何禁用定义了页面标题的
gtkasistant
侧栏

使用您的
glade.xml
,我得到以下错误:

    (Assistant.py:4515): Gtk-CRITICAL **: gtk_assistant_set_page_has_padding: assertion 'child != NULL' failed  
“下一步”按钮保持不敏感

已解决:使用
助手。设置页面完成(框,True)
启用下一步按钮


然而,使用以下API参考,我得到了这个结果:

:

退税
操作系统将
Gtk.Assistant.
窗口标题视为
未定义

使用
gtkasistant.set_title(…
没有结果


首先使用
gtkasistant
中的
Glade
添加
信号“prepare”

<signal name="prepare" handler="on_assistant_prepare" swapped="no"/>

用法

导入gi
gi.require_版本('Gtk','3.0')
从gi.repository导入Gtk
GTK类抗蚀剂:
定义初始化(自):
self.builder=Gtk.builder()
self.builder.add_from_文件(u文件_u.replace('.py','.glade'))
self.builder.connect_信号(self)
助手=self.builder.get\u对象(“助手”)
#从glade保存页面滴度
#将页面标题设置为空“”以强制不显示侧边栏
对于[“第1页”、“第2页”、“第3页”]中的_id:
box=self.builder.get\u对象(\u id)
box.page\u title=助手。获取页面\u title(box)
助手。设置页面标题(框“”)
#Gtk.助手拒绝这样做。甚至在林间空地上也设定了头衔
#注册助理
助理。设置标题(“注册助理”)
#替换助手。设置页面标题(…具有自己的功能
assistant.set\u page\u title=self.set\u page\u title
#将窗装饰替换为自定义窗眉
self.title=Gtk.Label()
headerbar=Gtk.headerbar()
标题栏。设置\显示\关闭\按钮(真)
标题栏。设置\自定义\标题(self.title)
助理。设置标题栏(标题栏)
助理。全部显示()
def设置页面标题(自身、方框、标题):
self.title.set_文本(title)
def on_assistant_prepare(自身、助手、方框、用户数据=无):
助手。设置页面标题(框,框。页面标题)
#这将使更新按钮的状态
#能够继续完成任务。
助手。设置页面完成(框,真)
def on_destroy(self,widget,data=None):
Gtk.main_quit()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
辅助=GTK辅助()
Gtk.main()

使用Python:3.5-gi进行测试。版本:3.22.0-Glade 3.20.0

无法隐藏它:(你可以接受它,也可以重新实现
GtkAssistant
@stovfl我添加了glade文件及其结果。如果我删除所有页面标题,我可以删除侧栏,但我不想删除页面标题。你可以随时向Gtk提交增强请求,或者自己实现。太棒了!这就是我想要的…:-)我刚刚添加了一个
助手。设置页面完成(框,真)
助手上的
内,准备测试下一步和后退按钮。@jcfaracco:是的,这个
助手。设置页面完成(框,真)
就可以了。不应该是
Glade
中的复选框吗?是的,可以;-)
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk


class GtkAssistant:
    def __init__(self):
        self.builder = Gtk.Builder()
        self.builder.add_from_file(__file__.replace('.py', '.glade'))
        self.builder.connect_signals(self)

        assistant = self.builder.get_object("assistant")

        # Preserve the page titels from glade
        # Set page titles to empty '' to force not to show sidebar
        for _id in ["page1", "page2", "page3"]:
            box = self.builder.get_object(_id)
            box.page_title = assistant.get_page_title(box)
            assistant.set_page_title(box, '')

        # Gtk.Assistant refuses to do .set_title even defined in glade
        # <property name="title" translatable="yes">Registration-Assistant</property>
        assistant.set_title('Registration-Assistant')

        # Replace assistant.set_page_title(... with own function
        assistant.set_page_title = self.set_page_title

        # Replace the window decoration with a custom HeaderBar
        self.title = Gtk.Label()
        headerbar = Gtk.HeaderBar()
        headerbar.set_show_close_button(True)
        headerbar.set_custom_title(self.title)
        assistant.set_titlebar(headerbar)

        assistant.show_all()

    def set_page_title(self, box, title):
        self.title.set_text(title)

    def on_assistant_prepare(self, assistant, box, user_data=None):
        assistant.set_page_title(box, box.page_title)
        # This will make update the buttons state 
        # to be able to continue the task.
        assistant.set_page_complete(box, True)

    def on_destroy(self, widget, data=None):
        Gtk.main_quit()

if __name__ == '__main__':
    assist = GtkAssistant()
    Gtk.main()