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()
Libhandy需要先初始化,然后才能在UI文件中识别。尝试在主文件中添加
Handy.init()
相关问题 更多 >
编程相关推荐