PyGObject无法识别hdy.window

2024-05-14 14:45:31 发布

您现在位置:Python中文网/ 问答频道 /正文

Note: I unfortunately use Google translate for translation. Please ignore my mistakes.

你好。我正在尝试用PyGTK开发一个应用程序。我使用Glade作为UI设计器。但不幸的是,当我尝试启动我的应用程序时,我得到了这样一个错误

[alperen@fedora merhaba-dunya]$ python main.py
Traceback (most recent call last):
  File "/home/alperen/Projeler/merhaba-dunya/main.py", line 19, in do_activate
    self.window = MainWindow(self) # MainWindow nesnemizi oluşturduk.
  File "/home/alperen/Projeler/merhaba-dunya/MainWindow.py", line 19, in __init__
    self.builder.add_from_file("Example.ui")
gi.repository.GLib.Error: gtk-builder-error-quark: Example.ui:7:1 Invalid object type 'HdyWindow' (6)

Example.ui文件:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
  <requires lib="gtk+" version="3.24"/>
  <requires lib="libhandy" version="0.0"/>
  <object class="HdyWindow">
    <property name="can-focus">False</property>
    <child>
      <object class="HdyWindowHandle">
        <property name="visible">True</property>
        <property name="can-focus">False</property>
        <child>
          <object class="GtkBox">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
            <property name="margin-left">15</property>
            <property name="margin-right">15</property>
            <property name="margin-start">15</property>
            <property name="margin-end">15</property>
            <property name="margin-top">15</property>
            <property name="margin-bottom">15</property>
            <property name="orientation">vertical</property>
            <property name="spacing">13</property>
            <child>
              <object class="GtkLabel">
                <property name="visible">True</property>
                <property name="can-focus">False</property>
                <property name="label" translatable="yes">Selamlar!</property>
                <property name="ellipsize">middle</property>
                <attributes>
                  <attribute name="scale" value="2"/>
                </attributes>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkBox">
                <property name="visible">True</property>
                <property name="can-focus">False</property>
                <child>
                  <object class="GtkButton" id="tikla">
                    <property name="label" translatable="yes">Bana tıkla!</property>
                    <property name="visible">True</property>
                    <property name="can-focus">True</property>
                    <property name="receives-default">True</property>
                    <property name="halign">start</property>
                    <property name="hexpand">True</property>
                    <signal name="clicked" handler="on_tikla_clicked" swapped="no"/>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkButton" id="kapat">
                    <property name="label" translatable="yes">Uygulamayı kapat</property>
                    <property name="width-request">71</property>
                    <property name="visible">True</property>
                    <property name="can-focus">True</property>
                    <property name="receives-default">True</property>
                    <property name="halign">end</property>
                    <property name="hexpand">True</property>
                    <signal name="clicked" handler="on_kapat_clicked" swapped="no"/>
                    <style>
                      <class name="destructive-action"/>
                    </style>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">1</property>
                  </packing>
                </child>
              </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">Bu bir örnek yazı

Bu alt
alta yazılmış bir yazı

Burası yazılarla dolu!</property>
                <property name="justify">fill</property>
                <property name="xalign">0.05999999865889549</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">2</property>
              </packing>
            </child>
          </object>
        </child>
      </object>
    </child>
  </object>
  <object class="GtkAboutDialog" id="hakkinda">
    <property name="can-focus">False</property>
    <property name="title" translatable="yes">Hakkında</property>
    <property name="type-hint">dialog</property>
    <property name="program-name">Örnek uygulama</property>
    <property name="version">0.1</property>
    <property name="comments" translatable="yes">GTK+ ile yazılmış merhaba dünya tarzı bir uygulama</property>
    <property name="website">github.com/Afacanc38/merhaba-dunya</property>
    <property name="website-label" translatable="yes">Kaynak Kodu</property>
    <property name="authors">Alperen İsa Nalbant</property>
    <property name="logo-icon-name">help-about</property>
    <property name="license-type">gpl-3-0</property>
    <child internal-child="vbox">
      <object class="GtkBox">
        <property name="can-focus">False</property>
        <property name="orientation">vertical</property>
        <property name="spacing">2</property>
        <child internal-child="action_area">
          <object class="GtkButtonBox">
            <property name="can-focus">False</property>
            <property name="layout-style">end</property>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
    </child>
  </object>
  <object class="GtkMessageDialog" id="merhaba">
    <property name="can-focus">False</property>
    <property name="icon-name">face-smile</property>
    <property name="type-hint">dialog</property>
    <property name="buttons">close</property>
    <property name="text" translatable="yes">Merhaba
  Dünya</property>
    <property name="secondary-text" translatable="yes">hemele hümele</property>
    <child internal-child="vbox">
      <object class="GtkBox">
        <property name="can-focus">False</property>
        <property name="orientation">vertical</property>
        <property name="spacing">2</property>
        <child internal-child="action_area">
          <object class="GtkButtonBox">
            <property name="can-focus">False</property>
            <property name="homogeneous">True</property>
            <property name="layout-style">expand</property>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

main.py文件:

#!/usr/bin/env python3

import sys

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

from MainWindow import MainWindow

class Uygulama(Gtk.Application):
    def __init__(self, *args, **kwargs):
        super().__init__(*args,
            application_id="org.yapboz.example",
            flags=Gio.ApplicationFlags.FLAGS_NONE,
            **kwargs)
    
    def do_activate(self):
        self.window = MainWindow(self)

app = Uygulama()
app.run(sys.argv)

MainWindow.py文件:

import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Handy', '1')
from gi.repository import Gtk, GLib, Gio, Gdk
from gi.repository import Handy

# CSS dosyamızı ekleyelim.
screen = Gdk.Screen.get_default()
provider = Gtk.CssProvider()
provider.load_from_path("style.css")
Gtk.StyleContext.add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

class MainWindow:
    def __init__(self, app):
        self.builder = Gtk.Builder()

        self.builder.add_from_file("Example.ui")
        self.builder.connect_signals(self)

        self.window = self.builder.get_object("window")
        self.dialog_about = self.builder.get_object("hakkinda")
        self.merhaba = self.builder.get_object("merhaba")
        self.window.set_application(app)
        self.window.set_icon_from_file('images/logo.png')
        
        self.window.show_all()
    
    def on_tikla_clicked(self, button):
        self.merhaba.run()
        self.merhaba.hide()
    def on_kapat_clicked(self, button):
        self.window.get_application().quit()
    def on_about_clicked(self, button):
        self.dialog_about.run()
        self.dialog_about.hide()

Tags: nameselffalsechildtrueobjectpropertycan

热门问题