GScreen and some understanding gap of hal-widgets
- cmorley
- Offline
- Moderator
-
- Posts: 7869
- Thank you received: 2125
But I don't use a VB, I use an english system, my system did have a compiled version on too... etc any of these things could be a problem.
I prefer and am most familiar with, a compiled version of course.
I do have a little time so might try a fresh install, but until i can get it to fail ....
But if you just want a custom screen for yourself - you have invested in Gscreen so why not continue.
I just wouln't bother with trying to build custom widgets/actions - just use the available widgets and program the rest in the handler file.
Just long term GTK2 seems not to be included in the newest Debian versions - though other distributions I bet will still include them. Not a problem unless you insist on the newest version of distributions
It's a transitional time right now for widget toolkits and python.
sleep time...
Chris M
Please Log in or Create an account to join the conversation.
- Reinhard
- Offline
- Platinum Member
-
- Posts: 508
- Thank you received: 94
Hm, what's that statement based on?Just long term GTK2 seems not to be included in the newest Debian versions
When I look a debians package information of gtk-2, it shows this:
Quellcode-Paket gtk+2.0
jessie (libs): 2.24.25-3+deb8u2
Binär-Pakete: gir1.2-gtk-2.0, gtk2-engines-pixbuf, gtk2.0-examples, libgail-common, libgail-dbg, libgail-dev, libgail-doc, libgail18, libgtk2.0-0, libgtk2.0-0-dbg, libgtk2.0-0-udeb, libgtk2.0-bin, libgtk2.0-common, libgtk2.0-dev, libgtk2.0-doc
stretch (libs): 2.24.31-2
Binär-Pakete: gir1.2-gtk-2.0, gtk2-engines-pixbuf, gtk2.0-examples, libgail-common, libgail-dbg, libgail-dev, libgail-doc, libgail18, libgail18-udeb, libgtk2.0-0, libgtk2.0-0-dbg, libgtk2.0-0-udeb, libgtk2.0-bin, libgtk2.0-common, libgtk2.0-dev, libgtk2.0-doc
buster (libs): 2.24.32-3
.
.
.
sid (libs): 2.24.32-3
Binär-Pakete: gir1.2-gtk-2.0, gtk2-engines-pixbuf, gtk2.0-examples, libgail-common, libgail-dev, libgail-doc, libgail18, libgail18-udeb, libgtk2.0-0, libgtk2.0-0-udeb, libgtk2.0-bin, libgtk2.0-common, libgtk2.0-dev, libgtk2.0-doc
So what am I missing?
Please Log in or Create an account to join the conversation.
- cmorley
- Offline
- Moderator
-
- Posts: 7869
- Thank you received: 2125
tom-itx.no-ip.biz:81/~tom-itx/irc/logs/%...evel/2019-06-13.html
but you are right, in there they do mention it is still available in buster.
GLADE editor is not but it hasn't been included for a long while. I think we forward port a ubuntu package for it.
Chris M
Please Log in or Create an account to join the conversation.
- Reinhard
- Offline
- Platinum Member
-
- Posts: 508
- Thank you received: 94
debian has glade editor included - of cause!GLADE editor is not but it hasn't been included for a long while.
Current stable, as well as SID.
The outdated version of glade-editor, that's required for linuxcnc isn't part of debian.
I guess, it's not part of any linux.
But compiling it from a download package is not a challenge. One has to keep in mind, that the executable has a different name (the outdated is named glade-3 versus glade, which is the current release).
The only downside comes from linuxcnc again: working on custom screenset works in rip-environment only. No description leads to a working environment without rip installation.
Debians preferred window-manager (gnome) is based on gtk, so I can't believe, that debian will give up gtk.
Please Log in or Create an account to join the conversation.
- Reinhard
- Offline
- Platinum Member
-
- Posts: 508
- Thank you received: 94
I successfully created a glade with handler that connects signal-callbacks without the use of gscreen.
Then I grabbed the sources of pygtk to see, what happens at widget.connect() - but I had no success.
Most of pygtk is wrapper-description - does not really help understand.
I guess that event is just a function call and a handler is a function callback. So connect needs to enter the callback into the function call.
Why I ask? - I think, the widget itself has some actions that need to be performed on certain event and the callback-provider does not need to know about the internal actions.
So when I want to extend the internal actions without disrupting the event-mechanism, where should I place my code (I don't want it to put into the handler. Should be part of a widget class)?
Let's take for example a pushbutton with the 'clicked' event. Event-Handler callback is 'on_<pbName>_clicked' - but PushButton has no function called on_clicked. It has a 'clicked' method and a 'do_clicked' method. Which one is appropriate to overload?
Please Log in or Create an account to join the conversation.
- cmorley
- Offline
- Moderator
-
- Posts: 7869
- Thank you received: 2125
docs.huihoo.com/pygtk/2.0-tutorial/ch-Ad...dSignalHandling.html
comes from here::
docs.huihoo.com/pygtk/2.0-tutorial/index.html
another reference for widgets:
developer.gnome.org/pygtk/stable/
Chris M
Please Log in or Create an account to join the conversation.
- Reinhard
- Offline
- Platinum Member
-
- Posts: 508
- Thank you received: 94
thank you for the links. Nothing new or unknown so far and nothing to answer my questions ...
Anyway - I was able to create my first widget - with the help of hal_widget so far!

It works, but it has a really annoying behaviour - any time I replace the button with an image, the widget is about to resize. Hell!

I already copy all properties from one widget to the other - but that does not help anything.
Does anybody know a solution to prevent the resizing of the widget?
I create the screen for fullscreen usage - so resizing should never be an issue or even happen at all.
On this sample I use a homogeneous table with size-request of 100x100 - my imageIcons have the size 100x100 - the ToggleButton the gets a size of 112x112 - but when I use a size-request of 112x112 the ToggleButton grows even further.
Usage of the buttons of the test app:
Button 1 - 3 change the background color of my widget
Button 8 simulates a hal-pinchange event (external toggling of the button)
Button 5 makes the widget unresponsive (I don't want to use set_sensitive, cause it changes color of the images)
Button 6 makes the widget responsive again
Any help is appreciated!
Please Log in or Create an account to join the conversation.
- cmorley
- Offline
- Moderator
-
- Posts: 7869
- Thank you received: 2125
You might be able to explicitly set the size programmatically after insertion, you may need to .hide() .show() the widget..
Is it a toggle button with images that change on external events, or an image that changes on external events that you are looking to make?
The fact you are (in handleWidges) removing/inserting widgets from a container seems complicated.
You should be able to change the image on a button with .set_image()
here is an example (that I didn't try but shows the idea):
mport gtk
win = gtk.Window()
image_add = gtk.Image()
image_rem = gtk.Image()
b = gtk.Button()
image_add.set_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_BUTTON)
image_rem.set_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_BUTTON)
def on_clicked(button):
state = button.get_active()
if state:
button.set_image(image_rem)
else:
button.set_image(image_add)
# setup initial state
b.set_image(image_add)
# connect signals
b.connect('clicked', on_clicked)
win.connect('delete-event', gtk.main_quit)
win.add(b)
win.show_all()
gtk.main()
Please Log in or Create an account to join the conversation.
- Reinhard
- Offline
- Platinum Member
-
- Posts: 508
- Thank you received: 94
I already used 'button.set_image(...)'
The challenge was to remove the button (under the hood) without changing the shown picture.
I got it by changing the superclass from Eventbox to Notebook. Notebook will not resize on page flip, so ...
As Stack-widget is not available at the version used by linuxcnc, Notebook will be the closest try ...
I now have a misplacement of 1 pixel - not nice, but acceptable. At least at the moment

So I can continue work and create other widgets ...
Please Log in or Create an account to join the conversation.
- cmorley
- Offline
- Moderator
-
- Posts: 7869
- Thank you received: 2125
Hi Chris,
I already used 'button.set_image(...)'
Yes I saw that in your code - but you seemed to have missed the bigger point.
You seem to be having fun now. I'm interested to see your finished screen!
Chris M
Please Log in or Create an account to join the conversation.