Üzüntü
Hectopat
- Katılım
- 18 Şubat 2021
- Mesajlar
- 1.670
- Makaleler
- 5
- Çözümler
- 26
Merhaba. GTK ve Python dünyasına henüz yeni katılmış bir kişiyim. Glade ile 2 sayfalı bir uygulama tasarımı yaptım. Bu tasarımdaki "İleri" tuşuna basıldığı zaman 2. sayfaya geçiş yapsın istiyorum.
Programın kaynak kodu şu şekilde:
[CODE lang="python" title="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.stackdemo",
flags=Gio.ApplicationFlags.FLAGS_NONE,
**kwargs)
def do_activate(self):
self.window = MainWindow(self)
app = Uygulama()
app.run(sys.argv)[/CODE]
[CODE lang="python" title="MainWindow.py" highlight="19, 20, 21"]import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib, Gio
class MainWindow:
def __init__(self, app):
self.builder = Gtk.Builder()
self.builder.add_from_file("MainWindow.glade")
self.builder.connect_signals(self)
self.window = self.builder.get_object("window")
self.window.set_application(app)
self.window.show_all()
self.stack = self.builder.get_object("stack") # Bu projedeki GTK Stack
def on_btn_next_clicked(self, button):
# Bu da bahsettiğim düğme.
print("Bu kısmı yapamadım.")[/CODE]
[CODE title="MainWindow.glade"]<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="window">
<property name="can-focus">False</property>
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">60</property>
<property name="margin-end">60</property>
<property name="margin-top">20</property>
<property name="margin-bottom">20</property>
<property name="transition-type">slide-left-right</property>
<child>
<object class="GtkBox" id="page1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</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">Selamun aleyküm</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_next">
<property name="label" translatable="yes">İleri</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<signal name="clicked" handler="on_btn_next_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="name">page0</property>
<property name="title" translatable="yes">page0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="page2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Ve aleyküm selam</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_kapat">
<property name="label" translatable="yes">Kapat</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">page1</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">Sayfalar!</property>
<property name="subtitle" translatable="yes">Henüz tamamlanmadı.</property>
<property name="show-close-button">True</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</interface>[/CODE]
Çözüm:
Glade uygulamasını başlatın. Dosyamızı açtıktan sonra sayfalardaki box'ı bu şekilde seçin ve paketleme sayfasına gelin. Sonra belirtilen yerde tüm sayfalarımıza ad verin ve kaydedip çıkın.
Sonra MainWindow.py dosyasında geçiş yapmasını istediğiniz yere gerekli yerleri düzenleyerek şu satırı ekleyin:
Programın kaynak kodu şu şekilde:
[CODE lang="python" title="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.stackdemo",
flags=Gio.ApplicationFlags.FLAGS_NONE,
**kwargs)
def do_activate(self):
self.window = MainWindow(self)
app = Uygulama()
app.run(sys.argv)[/CODE]
[CODE lang="python" title="MainWindow.py" highlight="19, 20, 21"]import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib, Gio
class MainWindow:
def __init__(self, app):
self.builder = Gtk.Builder()
self.builder.add_from_file("MainWindow.glade")
self.builder.connect_signals(self)
self.window = self.builder.get_object("window")
self.window.set_application(app)
self.window.show_all()
self.stack = self.builder.get_object("stack") # Bu projedeki GTK Stack
def on_btn_next_clicked(self, button):
# Bu da bahsettiğim düğme.
print("Bu kısmı yapamadım.")[/CODE]
[CODE title="MainWindow.glade"]<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="window">
<property name="can-focus">False</property>
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">60</property>
<property name="margin-end">60</property>
<property name="margin-top">20</property>
<property name="margin-bottom">20</property>
<property name="transition-type">slide-left-right</property>
<child>
<object class="GtkBox" id="page1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</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">Selamun aleyküm</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_next">
<property name="label" translatable="yes">İleri</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<signal name="clicked" handler="on_btn_next_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="name">page0</property>
<property name="title" translatable="yes">page0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="page2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Ve aleyküm selam</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_kapat">
<property name="label" translatable="yes">Kapat</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">page1</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">Sayfalar!</property>
<property name="subtitle" translatable="yes">Henüz tamamlanmadı.</property>
<property name="show-close-button">True</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</interface>[/CODE]
Çözüm:
Glade uygulamasını başlatın. Dosyamızı açtıktan sonra sayfalardaki box'ı bu şekilde seçin ve paketleme sayfasına gelin. Sonra belirtilen yerde tüm sayfalarımıza ad verin ve kaydedip çıkın.
Sonra MainWindow.py dosyasında geçiş yapmasını istediğiniz yere gerekli yerleri düzenleyerek şu satırı ekleyin:
Python:
self.stack_adi.set_visible_child_name("sayfaadi")
Son düzenleme: