MultiWindow错误Glade,Gtk和Python [英] MultiWindow error Glade, Gtk and Python

查看:96
本文介绍了MultiWindow错误Glade,Gtk和Python的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在建立一个必须登录才能进入的界面.因此,在登录窗口中,我放了一个按钮以打开模式窗口(关于对话框).它可以正常工作,但我只能说一次:该窗口可以打开和关闭,但是如果再次尝试,它将失败.我不知道为什么,我很开始. Glade代码是:

I am making an interface where you have to be logged to enter. So at sign in window I put a button to open a modal window (about dialog). It works fine, but just once, I mean: this window can be opened and closed, but if you try again, it fails. I can not realize why and I am quite begginer. The Glade code is:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
  <requires lib="gtk+" version="3.10"/>
 <object class="GtkAboutDialog" id="aboutwin">
<property name="can_focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="window_position">center</property>
<property name="destroy_with_parent">True</property>
<property name="type_hint">dialog</property>
<property name="has_resize_grip">False</property>
<property name="program_name">Movies App</property>
<property name="version">Version: 0.1</property>
<property name="authors">Markos Horro Varela
Breixo Camiña Fernández</property>
<property name="documenters">Markos Horro Varela
Breixo Camiña Fernández</property>
<property name="translator_credits" translatable="yes">Markos Horro Varela
Breixo Camiña Fernández</property>
<property name="artists">Markos Horro Varela
Breixo Camiña Fernández</property>
<property name="logo_icon_name">video-x-generic</property>
<property name="license_type">gpl-3-0</property>
<signal name="close" handler="onDeleteWindow" swapped="no"/>
<signal name="delete-event" handler="onDeleteWindow" swapped="no"/>
<child internal-child="vbox">
  <object class="GtkBox" id="about">
    <property name="can_focus">False</property>
    <property name="orientation">vertical</property>
    <property name="spacing">2</property>
    <child internal-child="action_area">
      <object class="GtkButtonBox" id="aboutdialog-action_area1">
        <property name="can_focus">False</property>
        <property name="layout_style">end</property>
        <signal name="delete-event" handler="onDeleteWindow" swapped="no"/>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="pack_type">end</property>
        <property name="position">0</property>
      </packing>
    </child>
  </object>
</child>
</object>
<object class="GtkWindow" id="signinwin">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Movie App</property>
<property name="resizable">False</property>
<property name="window_position">center</property>
<property name="has_resize_grip">False</property>
<signal name="delete-event" handler="onDeleteWindow" swapped="no"/>
<child>
  <object class="GtkGrid" id="grid1">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="margin_left">10</property>
    <property name="margin_right">60</property>
    <property name="margin_top">10</property>
    <property name="margin_bottom">10</property>
    <child>
      <object class="GtkEntry" id="login">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="margin_right">10</property>
        <property name="margin_bottom">5</property>
        <property name="input_purpose">name</property>
      </object>
      <packing>
        <property name="left_attach">2</property>
        <property name="top_attach">1</property>
        <property name="width">1</property>
        <property name="height">1</property>
      </packing>
    </child>
    <child>
      <object class="GtkEntry" id="pass">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="margin_right">10</property>
        <property name="margin_top">5</property>
        <property name="margin_bottom">5</property>
        <property name="placeholder_text" translatable="yes">************</property>
        <property name="input_purpose">password</property>
      </object>
      <packing>
        <property name="left_attach">2</property>
        <property name="top_attach">2</property>
        <property name="width">1</property>
        <property name="height">1</property>
      </packing>
    </child>
    <child>
      <object class="GtkLabel" id="userlabel">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="margin_right">6</property>
        <property name="label" translatable="yes">User</property>
      </object>
      <packing>
        <property name="left_attach">1</property>
        <property name="top_attach">1</property>
        <property name="width">1</property>
        <property name="height">1</property>
      </packing>
    </child>
    <child>
      <object class="GtkLabel" id="passlabel">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="margin_right">6</property>
        <property name="label" translatable="yes">Password</property>
      </object>
      <packing>
        <property name="left_attach">1</property>
        <property name="top_attach">2</property>
        <property name="width">1</property>
        <property name="height">1</property>
      </packing>
    </child>
    <child>
      <object class="GtkButton" id="button1">
        <property name="label" translatable="yes">Sign in</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">True</property>
        <property name="margin_left">20</property>
        <property name="margin_right">20</property>
      </object>
      <packing>
        <property name="left_attach">2</property>
        <property name="top_attach">3</property>
        <property name="width">1</property>
        <property name="height">1</property>
      </packing>
    </child>
    <child>
      <object class="GtkLabel" id="title">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="margin_left">5</property>
        <property name="margin_right">5</property>
        <property name="margin_top">5</property>
        <property name="margin_bottom">5</property>
        <property name="label" translatable="yes">Movie App</property>
      </object>
      <packing>
        <property name="left_attach">2</property>
        <property name="top_attach">0</property>
        <property name="width">1</property>
        <property name="height">1</property>
      </packing>
    </child>
    <child>
      <object class="GtkGrid" id="grid2">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkButton" id="policy">
            <property name="label" translatable="yes">Policy</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="margin_left">30</property>
            <property name="margin_right">5</property>
            <property name="margin_top">30</property>
            <property name="margin_bottom">5</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">0</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="aboutus">
            <property name="label" translatable="yes">About</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="margin_left">5</property>
            <property name="margin_right">30</property>
            <property name="margin_top">30</property>
            <property name="margin_bottom">5</property>
            <signal name="clicked" handler="onAboutPressed" swapped="no"/>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="top_attach">0</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="left_attach">2</property>
        <property name="top_attach">4</property>
        <property name="width">1</property>
        <property name="height">1</property>
      </packing>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
    <child>
      <placeholder/>
    </child>
  </object>
</child>
</object>
</interface>

我的python代码是:

And my python code is:

#!/usr/bin/python

from gi.repository import Gtk

class Handler(Gtk.Window):
    def onDeleteWindow(self, *args):
        self.destroy()
        Gtk.main_quit(*args)


    def onAboutPressed(self, button):
        about = builder.get_object("aboutwin")
        about.run()
        about.destroy()

builder = Gtk.Builder()
builder.add_from_file("v0.glade")
builder.connect_signals(Handler())

main = builder.get_object("signinwin")
main.show_all()

Gtk.main()

推荐答案

我无法告诉您错误的确切含义,但可能是您在Glade中分配了错误的信号.我将关闭事件从 GtkDialog->关闭切换为 GtkDialog->响应.最好只在需要时获取AboutDialog,所以我将其放在自己的类中.我也是一个初学者,但是代码现在应该可以工作了:

I can't tell you what exactly what the error is, but it might be that you assigned the wrong signals in Glade. I switched the close event from GtkDialog --> close to GtkDialog --> response. It probably is also better to only get the AboutDialog when you need it, so I put it into its own class. I am also a beginner, but the code should work now:

#!/usr/bin/python

from gi.repository import Gtk

class AboutDialog:
    def __init__(self):
        self.builder = Gtk.Builder()
        self.builder.add_objects_from_file("v0.glade", ("aboutwin", ""))
        self.ab = self.builder.get_object("aboutwin")
        self.builder.connect_signals(self)

    def on_aboutdialog_response(self, widget, signal):
        print("About close with button or (x)")
        self.ab.hide()

    def run(self):
        self.ab.run()

class MainHandler(Gtk.Window):
    def on_delete_window(self, widget, signal):
        print("Main window closed")
        Gtk.main_quit()

    def on_about_pressed(self, button):
        print("Run About Dialog")
        about = AboutDialog()
        about.run()

def main():
    builder = Gtk.Builder()
    builder.add_objects_from_file("v0.glade", ("signinwin", "") )
    builder.connect_signals(MainHandler())

    main = builder.get_object("signinwin")
    main.show_all()

    Gtk.main()

if __name__ == "__main__":
      main()

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
  <requires lib="gtk+" version="3.10"/>
  <object class="GtkAboutDialog" id="aboutwin">
    <property name="can_focus">False</property>
    <property name="resizable">False</property>
    <property name="modal">True</property>
    <property name="window_position">center</property>
    <property name="destroy_with_parent">True</property>
    <property name="type_hint">dialog</property>
    <property name="has_resize_grip">False</property>
    <property name="program_name">Movies App</property>
    <property name="version">Version: 0.1</property>
    <property name="authors">Markos Horro Varela
Breixo Camiña Fernández</property>
    <property name="documenters">Markos Horro Varela
Breixo Camiña Fernández</property>
    <property name="translator_credits" translatable="yes">Markos Horro Varela
Breixo Camiña Fernández</property>
    <property name="artists">Markos Horro Varela
Breixo Camiña Fernández</property>
    <property name="logo_icon_name">video-x-generic</property>
    <property name="license_type">gpl-3-0</property>
    <signal name="response" handler="on_aboutdialog_response" swapped="no"/>
    <child internal-child="vbox">
      <object class="GtkBox" id="aboutgrid">
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <property name="spacing">2</property>
        <child internal-child="action_area">
          <object class="GtkButtonBox" id="aboutdialog-action_area1">
            <property name="can_focus">False</property>
            <property name="layout_style">end</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="pack_type">end</property>
            <property name="position">0</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
  <object class="GtkWindow" id="signinwin">
    <property name="can_focus">False</property>
    <property name="title" translatable="yes">Movie App</property>
    <property name="resizable">False</property>
    <property name="window_position">center</property>
    <property name="has_resize_grip">False</property>
    <signal name="delete-event" handler="on_delete_window" swapped="no"/>
    <child>
      <object class="GtkGrid" id="grid1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="margin_left">10</property>
        <property name="margin_right">60</property>
        <property name="margin_top">10</property>
        <property name="margin_bottom">10</property>
        <child>
          <object class="GtkEntry" id="login">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="margin_right">10</property>
            <property name="margin_bottom">5</property>
            <property name="input_purpose">name</property>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="top_attach">1</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="pass">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="margin_right">10</property>
            <property name="margin_top">5</property>
            <property name="margin_bottom">5</property>
            <property name="placeholder_text" translatable="yes">************</property>
            <property name="input_purpose">password</property>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="top_attach">2</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="userlabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="margin_right">6</property>
            <property name="label" translatable="yes">User</property>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="top_attach">1</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="passlabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="margin_right">6</property>
            <property name="label" translatable="yes">Password</property>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="top_attach">2</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">Sign in</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="margin_left">20</property>
            <property name="margin_right">20</property>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="top_attach">3</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="title">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="margin_left">5</property>
            <property name="margin_right">5</property>
            <property name="margin_top">5</property>
            <property name="margin_bottom">5</property>
            <property name="label" translatable="yes">Movie App</property>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="top_attach">0</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkGrid" id="grid2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkButton" id="policy">
                <property name="label" translatable="yes">Policy</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="margin_left">30</property>
                <property name="margin_right">5</property>
                <property name="margin_top">30</property>
                <property name="margin_bottom">5</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="aboutus">
                <property name="label" translatable="yes">About</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="margin_left">5</property>
                <property name="margin_right">30</property>
                <property name="margin_top">30</property>
                <property name="margin_bottom">5</property>
                <signal name="clicked" handler="on_about_pressed" swapped="no"/>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="left_attach">2</property>
            <property name="top_attach">4</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
    </child>
  </object>
</interface>

这篇关于MultiWindow错误Glade,Gtk和Python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆