Çözüm GTK Stack sayfayı değiştirme

Bu konu bir çözümü açıklamaktadır. Herhangi bir çözüm açıklanmadığını düşünüyorsanız konuyu rapor edebilirsiniz.

Ü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.

1.png


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:

Geri
Yukarı