Seite 1 von 2

Gui + Image als Hintergrund

Verfasst: 12.07.2013 18:11
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?

Re: Gui + Image als Hintergrund

Verfasst: 13.07.2013 22:43
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

Re: Gui + Image als Hintergrund

Verfasst: 13.07.2013 23:30
von NicTheQuick
Was ist denn das für eine Struktur mit dem Namen "I"?

Re: Gui + Image als Hintergrund

Verfasst: 13.07.2013 23:53
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

Re: Gui + Image als Hintergrund

Verfasst: 14.07.2013 00:01
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:

Re: Gui + Image als Hintergrund

Verfasst: 14.07.2013 08:47
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:

Re: Gui + Image als Hintergrund

Verfasst: 16.07.2013 10:40
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...

Re: Gui + Image als Hintergrund

Verfasst: 16.07.2013 19:41
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.

Re: Gui + Image als Hintergrund

Verfasst: 17.07.2013 18:51
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...

Re: Gui + Image als Hintergrund

Verfasst: 18.07.2013 04:32
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 !!