Diese Widgets haben eine eigene Klasse. Dies aus dem Grund weil das Widget eher komplex sein wird und mehrfach vorkommt. Im Beispiel ist diese Klasse auf einen Button vereinfacht (class OtherWidget).
Es gelingt mir Instanzen der OtherWidget-Klasse anzuzeigen. Unabhängig welcher Button als zweiter angeklickt wird, findet diese Instanz das Attribut setting dieser Klasse nicht mehr (AttributeError: "OtherWidget" has no attribute "_OtherWidget__Setting"). Erwarten würde ich, dass beim Klick auf Button One "Button One Left" oder "Button One Right" erscheint. Entsprechend beim Button Two: "Button Two Left" oder "Button Two Right".
Anbei der Code:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from gi.repository import Gtk
class MainWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.__grid = Gtk.Grid()
self.add(self.__grid)
self.__column = 0
self.__row = 0
self.__setting1 = "One"
self.__setting2 = "Two"
OtherWidget(self,self.__setting1) # widget 1
self.__column += 1
OtherWidget(self,self.__setting2) # widget 2
def add_widget_to_grid(self,widget):
""" add widget to grid, called from OtherWidget """
self.__grid.attach(widget,self.__column,self.__row,1,1)
class OtherWidget():
def __init__(self,window,setting):
self.__window = window
self.__setting = setting
self.__main_button = Gtk.Button("Button "+self.__setting)
self.__main_button.connect("button-press-event", self.__button_pressed)
self.__window.add_widget_to_grid(self.__main_button)
def __button_pressed(self,button,event):
if event.button == 1:
print("Left "+self.__setting)
elif event.button == 3:
print("Right "+self.__setting)
def main():
app = MainWindow()
app.connect("delete-event", Gtk.main_quit)
app.show_all()
Gtk.main()
if __name__ == '__main__':
main()
Danke im Voraus
Thomas