Python GTK3 + Использование кнопки для загрузки изображений - PullRequest
0 голосов
/ 18 марта 2019

Я создаю приложение, которое может использовать кнопку для загрузки и отображения изображения. Я не понимаю, как это будет работать с Python Gtk3 +.

Я хочу загрузить следующее изображение в папку с графическим интерфейсом, где первое изображение ... простая замена.

image = Gtk.Image()
image.set_from_file(self.image)
grid.attach(image, 0, 2, 1, 1) #grid location

button = Gtk.Button("Load next image")
button.connect("clicked", self.load_image)
grid.attach(button, 2, 1, 1, 1) #grid location

button1 = Gtk.Button("Load next image")
button1.connect("clicked", self.load_new_image)
grid.attach(button1, 2, 2, 1, 1) #grid location

def load_image(self, widget):
    self.image = 'image_path'

def load_new_image:
    self.image = 'image_path'

Я думал о Коробках Событий, или о чем-то подобном, но я немного растерялся. Раздел изображения запускается только один раз при создании экземпляра, поэтому я не понимаю, как он должен обновляться с событиями. Я хочу, чтобы изображение изменилось, если имя пути self.image изменяется в другом методе класса. Есть идеи?

1 Ответ

1 голос
/ 18 марта 2019

Может быть, я неправильно понимаю вопрос, но разве это не должно быть так просто?

Я объясню ответ как @DanD. указал.

Вам просто нужно задать путь к изображению (self.image.set_from_file (img)) в методе load_image (связанном с сигналом нажатия кнопки) с нужным изображением.

Current Gtk. Изображение будет автоматически отображать новое загруженное изображение.

import gi
import os
import sys

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

class GridWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Grid Example")

        grid = Gtk.Grid()
        self.add(grid)

        self.button = Gtk.Button(label="Button 1")
        self.image = Gtk.Image()

        grid.add(self.button)
        grid.add(self.image)

        self.button.connect("clicked", self.load_image)

        self.count = 0
        for root, _, files in os.walk(sys.argv[1]):
            self.images = [os.path.join(root, f) for f in files]

    def load_image(self, event):
        img = self.images[self.count]
        print(img)
        self.image.set_from_file(img)

        self.count = self.count + 1

win = GridWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
...