Wie ändere ich von einem Button oder Label den border-style?

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Wie ändere ich von einem Button oder Label den border-style?

Beitragvon Alfons Mittelmeyer » Donnerstag 31. August 2017, 19:52

Und damit meine ich nicht für alle Buttons oder Labels, sondern nur für einen.

Ich finde Doku über CSS und Gtk+ aber wie geht das in Python pyObject?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Habe es herausgefunden, aber auf meinem Pi3 gehen ridge und groove nicht.

Beitragvon Alfons Mittelmeyer » Donnerstag 31. August 2017, 23:33

Habe es herausgefunden, aber auf meinem Pi3 gehen ridge und groove nicht.

Bild

Hat jemand auch einen Raspberry und es funktiert da?

Das ist das Programm:

  1. import TkGtk as tk
  2.  
  3. class Application(tk.Tk):
  4.     def __init__(self,**kwargs):
  5.         tk.Tk.__init__(self,**kwargs)
  6.  
  7.         self.title('Hello World')
  8.  
  9.         self.title('Hello World')
  10.  
  11.         widget = tk.Label(self,text="none",relief='flat',bd=5, bg = '#d9d9d9', fg = 'black')
  12.         widget.grid(row=0,column=0)
  13.  
  14.         widget = tk.Label(self,text="solid",relief='solid',bd=5, bg = '#d9d9d9', bordercolor = 'black', fg = 'black')
  15.         widget.grid(row=0,column=1)
  16.  
  17.         widget = tk.Label(self,text="ridge",relief='ridge',bd=5, bg = '#d9d9d9', bordercolor = '#a8a8a8', fg = 'black')
  18.         widget.grid(row=0,column=2)
  19.  
  20.         widget = tk.Label(self,text="outset",relief='raised',bd=5, bg = '#d9d9d9', bordercolor = '#b0b0b0', fg = 'black')
  21.         widget.grid(row=1,column=0)
  22.  
  23.         widget = tk.Label(self,text="inset",relief='sunken',bd=5, bg = '#d9d9d9', bordercolor = '#b0b0b0', fg = 'black')
  24.         widget.grid(row=1,column=1)
  25.  
  26.         widget = tk.Label(self,text="groove",relief='groove',bd=5, bg = '#d9d9d9', bordercolor = '#b0b0b0', fg = 'black')
  27.         widget.grid(row=1,column=2)
  28.  
  29. Application().mainloop()


Und damit es läuft, braucht man noch TkGtk.py

  1. import gi
  2. gi.require_version('Gtk', '3.0')
  3. from gi.repository import Gtk,Gdk
  4.  
  5. def style_string(tkgtk_style):
  6.     st_str = ''
  7.     for key in sorted(tkgtk_style.keys()):
  8.         st_str += key + ' {'
  9.         for in_key, value in tkgtk_style[key].items():
  10.           st_str += '{} : {};'.format(in_key,value)  
  11.         st_str +=  ' }\n'
  12.     return bytes(st_str,'utf-8')
  13.  
  14. class TkGtkGuiElement:
  15.  
  16.     def __init__(self,master,**kwargs):
  17.         self.master = master
  18.         self.tkgtk_style = { self.tkgtk_type : { } }
  19.  
  20.  
  21.         self.config(**kwargs)
  22.  
  23.     def __setitem__(self,key,value):
  24.         conf = { key : value }
  25.         self.config(**conf)
  26.  
  27.     def config(self,**kwargs):
  28.         text = kwargs.pop('text',None)
  29.         if text != None: self.set_text(text)
  30.  
  31.         bg = kwargs.pop('bg',None)
  32.         if bg == None: bg = kwargs.pop('background',None)
  33.            
  34.         fg = kwargs.pop('fg',None)
  35.         if fg == None: fg = kwargs.pop('foreground',None)
  36.        
  37.         relief = kwargs.pop('relief',None)
  38.         if relief == 'flat': relief = 'none'
  39.         elif relief == 'sunken' : relief = 'inset'
  40.         elif relief == 'raised' : relief = 'outset'
  41.  
  42.  
  43.         bd = kwargs.pop('bd',None)
  44.         if bd == None: bd = kwargs.pop('borderwidth',None)
  45.            
  46.         bordercolor = kwargs.pop('bordercolor',None)
  47.  
  48.         activeforeground = kwargs.pop('activeforeground',None)
  49.  
  50.         set_style = False
  51.         if bg != None:
  52.             self.tkgtk_style[self.tkgtk_type]['background-color'] = bg
  53.             set_style = True
  54.  
  55.         activebackground = kwargs.pop('activebackground',None)
  56.  
  57.         if activebackground != None:
  58.             entry = self.tkgtk_type+':hover'
  59.             if entry not in self.tkgtk_style:
  60.                 self.tkgtk_style[entry] = {}
  61.             self.tkgtk_style[entry]['background-color'] = activebackground
  62.             set_style = True
  63.  
  64.         if activeforeground != None:
  65.             entry = self.tkgtk_type+':hover'
  66.             if entry not in self.tkgtk_style:
  67.                 self.tkgtk_style[entry] = {}
  68.             self.tkgtk_style[entry]['color'] = activeforeground
  69.             set_style = True
  70.  
  71.         if fg != None:
  72.             self.tkgtk_style[self.tkgtk_type]['color'] = fg
  73.             set_style = True
  74.  
  75.         if relief != None:
  76.             self.tkgtk_style[self.tkgtk_type]['border-style'] = relief
  77.             set_style = True
  78.  
  79.         if bd != None:
  80.             self.tkgtk_style[self.tkgtk_type]['border-width'] = str(bd)+'px'
  81.             set_style = True
  82.  
  83.         if bordercolor != None:
  84.             self.tkgtk_style[self.tkgtk_type]['border-color'] = bordercolor
  85.             set_style = True
  86.  
  87.         if kwargs:
  88.             for key,value in kwargs.items():
  89.                 self.tkgtk_style[self.tkgtk_type][key] = value
  90.             set_style = True
  91.  
  92.         if set_style:
  93.  
  94.             css = Gtk.CssProvider()
  95.             css.load_from_data(style_string(self.tkgtk_style))
  96.             style_context = self.get_style_context()
  97.             style_context.add_provider(css,Gtk.STYLE_PROVIDER_PRIORITY_SETTINGS)
  98.  
  99.     def grid(self,row=0,column=0,rowspan=1,columnspan=1,sticky=''):
  100.         self.master.layout.attach(self,column,row,columnspan,rowspan)
  101.  
  102.  
  103. class TkGtkGuiContainer(TkGtkGuiElement):
  104.  
  105.     def __init__(self,master,**kwargs):
  106.         TkGtkGuiElement.__init__(self,master,**kwargs)
  107.         self.layout = Gtk.Grid()
  108.         master.add(self.layout)
  109.  
  110.  
  111. class Label(Gtk.Label,TkGtkGuiElement):
  112.  
  113.     def __init__(self,master,**kwargs):
  114.         Gtk.Label.__init__(self)
  115.         self.tkgtk_type = 'GtkLabel'
  116.         TkGtkGuiElement.__init__(self,master,**kwargs)
  117.  
  118.  
  119. class Tk(Gtk.Window,TkGtkGuiContainer):
  120.  
  121.     def __init__(self,**kwargs):
  122.         Gtk.Window.__init__(self,title="TkGtk")
  123.         self.tkgtk_type = 'GtkWindow'
  124.         TkGtkGuiContainer.__init__(self,self,**kwargs)
  125.  
  126.         self.connect("delete-event", Gtk.main_quit)
  127.  
  128.     def title(self,text):
  129.         self.set_title(text)
  130.  
  131.     def mainloop(self):
  132.         self.show_all()
  133.         Gtk.main()

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder