Gui + Image als Hintergrund

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Gui + Image als Hintergrund

Beitrag von kevv »

Kann jemand folgenden Code nach pb umsetzen?
Ich Kriegs nicht hin

Quelle:
http://islascruz.org/html/index.php/blo ... tion..html

Code: Alles auswählen

#!/usr/bin/env python
import gtk
 
def draw_pixbuf(widget, event):
        path = '/home/markuz/wallpapers/WMwall1024x768.gif'
        pixbuf = gtk.gdk.pixbuf_new_from_file(path)
        widget.window.draw_pixbuf(widget.style.bg_gc[gtk.STATE_NORMAL], pixbuf, 0, 0, 0,0)
 
window = gtk.Window()
window.set_title('Drawing Test')
window.set_size_request(640,480)
window.connect('destroy',gtk.main_quit)
hbbox = gtk.HButtonBox()
window.add(hbbox)
hbbox.connect('expose-event', draw_pixbuf)
button = gtk.Button('Press Me!')
hbbox.pack_start(button, True, False, 10)
window.show_all()
 
gtk.main()

Noch ne Kleine extra frage.
Ist es möglich beim Editorgadget den Rahmen zu entfernen?
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Gui + Image als Hintergrund

Beitrag von Shardik »

Ich habe das Problem etwas anders als in dem Python-Beispiel gelöst. Dazu muß man wissen, dass ein PureBasic-Fenster in GTK ein GtkWindow ist, das eine GtkVBox enthält, die wiederum einen GtkFixed-Container enthält, in dem man die Gadgets platziert oder in dem man die Hintergrundfarbe ändert bzw. ein Hintergrundbild einbaut:

GtkWindow => GtkVBox => GtkFixed => Gadgets

Der einfachste Weg, den GtkFixed-Container zu ermitteln, führt über die Ermittlung des Parent Gadget vom ButtonGadget mit gtk_widget_get_parent().

In meinem Beispiel wird ein Hintergrundbild als Kachel geladen und automatisch auf die Fenstergröße aufgezogen. Beim Vergrößern bleibt so automatisch der ganze Hintergrund immer einheitlich. Möchte man dies nicht, kann man die Fenstermaße auf die Höhe und Breite des Hintergrundbildes setzen und bei OpenWindow() das Flag #PB_Window_SizeGadget entfernen.

Code: Alles auswählen

#ButtonWidth = 74

Define *Background
Define *FixedBox.GtkWidget
Define *Style.GtkStyle

If LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/Geebee2.bmp") = #False
  Debug "Error loading background image"
Else
  OpenWindow(0, 270, 100, 254, 260, "With background image", #PB_Window_SizeGadget)
  ButtonGadget(0, WindowWidth(0) / 2 - #ButtonWidth / 2, (WindowHeight(0) - 25) / 2, #ButtonWidth, 25, "Click me!")
  gdk_pixbuf_render_pixmap_and_mask_(ImageID(0), @*Background, 0, 0)
  *Style = gtk_style_new_()
  *Style\bg_pixmap[0] = *Background
  *FixedBox = gtk_widget_get_parent_(GadgetID(0))
  gtk_widget_set_style_(*FixedBox, *Style)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        If EventGadget() = 0
          Debug "Button was clicked!"
        EndIf
    EndSelect
  ForEver
EndIf
Zuletzt geändert von Shardik am 14.07.2013 08:47, insgesamt 1-mal geändert.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Gui + Image als Hintergrund

Beitrag von NicTheQuick »

Was ist denn das für eine Struktur mit dem Namen "I"?
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Gui + Image als Hintergrund

Beitrag von Shardik »

NicTheQuick hat geschrieben:Was ist denn das für eine Struktur mit dem Namen "I"?
I = i = Integer

Selbst Fred hat mich schon per PM gefragt, warum ich immer alle Variablentypen gross schreibe... :wink:
Dies liegt in mehr als 32 Jahren Programmierpraxis begründet. In VisualBASIC und noch viel älteren BASIC-Versionen wird eine Variable auch als

Code: Alles auswählen

Dim Background as Integer
deklariert. In PureBasic betrachte ich dies als äquivalente Kurzschreibform:

Code: Alles auswählen

Define Background.I
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Gui + Image als Hintergrund

Beitrag von ts-soft »

Letztendlich Deine "Macke" :mrgreen: , aber ich denke, es ging eher darum:
14. Februar 2013 : Version 5.10 hat geschrieben:- Geändert: Native Typen bei Zeigern (Pointern) sind nicht mehr erlaubt
Also bei mir gibt es eine Fehlermeldung, egal ob kleines oder grosses überflüssiges I :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Gui + Image als Hintergrund

Beitrag von Shardik »

ts-soft hat geschrieben:Letztendlich Deine "Macke" :mrgreen:
Genauso ist es zu sehen... :twisted:
ts-soft hat geschrieben:
14. Februar 2013 : Version 5.10 hat geschrieben:- Geändert: Native Typen bei Zeigern (Pointern) sind nicht mehr erlaubt
Also bei mir gibt es eine Fehlermeldung, egal ob kleines oder grosses überflüssiges I :wink:
Das ist mir jetzt aber peinlich. Man sollte nach einem ereignisreichen Tag mit viel "real life" nicht noch eben schnell ein altes Beispiel aus der Schublade holen, es erfolgreich testen und dann noch schnell nachträglich einen Pointer mit einem nicht mehr erlaubten Typen versehen, um es dann in ein Posting zu kopieren... :lol:

Ich habe mein obiges Beispiel korrigiert. Sorry, NicTheQuick, für die unnötige Verwirrung, und Danke, Thomas, für das Augenöffnen am heutigen Sonntagmorgen. :allright:
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Gui + Image als Hintergrund

Beitrag von Shardik »

kevv hat geschrieben:Noch ne Kleine extra frage.
Ist es möglich beim Editorgadget den Rahmen zu entfernen?
Ich habe in einem Beitrag weiter unten eine einfache Möglichkeit demonstriert...
Zuletzt geändert von Shardik am 18.07.2013 12:44, insgesamt 1-mal geändert.
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Re: Gui + Image als Hintergrund

Beitrag von kevv »

So sollte das aussehen, nur mit Editor statt Stringgadged.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   SetWindowColor(0, $F14071) 
   
    StringGadget(1, 8,  10, 306, 20, "Normal StringGadget...",#PB_String_BorderLess)
    SetGadgetColor(1, #PB_Gadget_BackColor , $F14071)
     
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

Ich hab unter Windows die Gadgetränder in den Hintergrundbild gezeichnet,
und die Gadgeds danach entsprechend platziert, deswegen muss ich die Gadgedränder irgendwie loswerden.
und unter linux ist es nur bei StringGadget + #PB_String_BorderLess möglich.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Gui + Image als Hintergrund

Beitrag von Shardik »

kevv hat geschrieben:So sollte das aussehen, nur mit Editor statt Stringgadged.
Wie soll das denn jetzt wirklich aussehen? Dir ist bewußt, dass dies unter jeder Linux-Distribution etwas anders aussehen kann? Denn unter Ubuntu 12.04 mit KDE wird z.B. trotz des Flags #PB_String_Borderless ein oberer Rand angezeigt:
Bild

In Ubuntu 12.04 mit Unity dagegen nicht:

Bild


Dies ist Dein etwas abgewandeltes Beispielprogramm mit einem StringGadget und EditorGadget:

Code: Alles auswählen

OpenWindow(0, 100, 70, 220, 140, "Borderless Gadgets")
SetWindowColor(0, $D6F8E5)

StringGadget(0, 10, 10, WindowWidth(0) - 20, 22, "Borderless StringGadget", #PB_String_BorderLess)
SetGadgetColor(0, #PB_Gadget_BackColor, $D6F8E5)

EditorGadget(1, 10, 45, WindowWidth(0) - 20, 80)
SetGadgetColor(1, #PB_Gadget_BackColor, $D6F8E5)

For i = 1 To 5
  AddGadgetItem(1, -1, "EditorGadget - Zeile " + Str(i))
Next i

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Unter Linux ist es - vorsichtig ausgedrückt - unüblich, den Fenster- oder Gadget-Hintergrund zu ändern oder Gadget-Rahmen zu manipulieren. Und die vielen Desktop-Manager wie Gnome, KDE, Unity, LXDE, Xfce, FluxBox (um nur einige wenige zu nennen) sowie die Möglichkeit Themes zu nutzen, machen es für den Software-Entwickler sowieso schon sehr schwer, ein Programm mit einer GUI-Oberfläche zu entwickeln, das auf möglichst vielen Distributionen ohne graphische Darstellungsprobleme läuft. Viele Linux-Nutzer lehnen sowieso Programme ab, die die von ihnen eingestellten Themes umgehen und ihr eigenes Süppchen kochen. Sie haben bewußt eine bestimmte Hintergrundfarbe für ihr Fenster oder ihre Gadgets eingestellt und haben etwas dagegen, wenn ein neues Programm sich nicht an ihre Voreinstellungen hält!

Wenn Du nur ein Programm für Dich selbst und für die von Dir verwendete Distribution entwickelst, sollte dies natürlich kein Problem sein... :wink:

Vielleicht solltest Du die von Dir eingesetzte Distribution in Deine Signatur schreiben. Ich habe eigens für den Test von PureBasic-Programmen unter Linux einen Testrechner mit 22 verschiedenen Linux-Distributionen aufgesetzt. Vielleicht ist Deine Distribution ja auch dabei und ich kann bei zukünftigen Fragen von Dir die Probleme direkt auf der von Dir eingesetzten Distribution nachstellen...
Zuletzt geändert von Shardik am 18.07.2013 16:13, insgesamt 1-mal geändert.
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Re: Gui + Image als Hintergrund

Beitrag von kevv »

Nach dem Ich mir das so anhöre, lass ich das mall lieber sein und benutz die Standard GUI-Oberfläche.

Was mir grade beim Testen aufgefallen ist,
beim schwarzen Hintergrund hat der Editor keine sichtbaren Ränder, jedenfalls unter LinuxMint 14.
Bild



Somit sieht auch meine gui so aus, wie sie soll.
Bild



Und bei hellen sieht´s dann wieder blöd aus
Bild


naja ist ja auch egal
und DANKE für die Aufklärung !!
Antworten