Aktuelle Zeit: 18.12.2018 12:22

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Warum sieht ein Gui unter Linux nicht schön aus?(Anfänger)
BeitragVerfasst: 12.07.2018 15:29 
Offline

Registriert: 09.05.2018 09:47
Ich habe ein GUI-Beispiel mit Purebaisc programmiert. Das Programm läuft unter Windows gut, die GUI sieht gut aus. Dann habe ich das gleichen Programm unter Linux Minte 19 Mate laufen gelassen. warum sieht die GUI nicht schön wie unter Windows aus. Außdem funktioniert #PB_TEXT_RIGHT und SetWindowColor(0, $EAD1B9) nicht mehr. Die Hntergrundfarbe vom Fenster kann nicht verändert werden.

Code:
If OpenWindow(0, 0, 0, 500, 400, "GUI Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  SetWindowColor(0, $EAD1B9)
  sPF =StringGadget(1, 30, 20, 80, 22, "0", #PB_String_ReadOnly|#PB_String_Numeric|#PB_Text_Right)
  ButtonGadget(2, 200, 20, 80, 25, "Connect")
 
EndIf


Repeat
  Event = WaitWindowEvent()
   
  Select Event
    Case #PB_Event_CloseWindow   
      End
     
    Case #PB_Event_Gadget
      Select EventGadget()
         
      EndSelect
   
  EndSelect
 
 ForEver


Gibt es noch andere Möglichkeit, die schöne GUI unter Linux zu bekommen? mit Gtk+ oder ...? Oder muss ich noch was unter Linux Mint 19 Mate installieren?
Bitte um die Hilfe!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum sieht ein Gui unter Linux nicht schön aus?(Anfänge
BeitragVerfasst: 12.07.2018 15:50 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Bei mir ist das Fenster blau, mit pb 5.62 x64, Ubuntu 16.04.
Du kannst mal in den Compiler Options bei Subsystem 'gtk2' eingeben (ohne Anführungszeichen) und gucken ob es anders aussieht, Default ist gtk3. Die Mindestgrößen für GUI Elemente sind mit gkt3 glaube ich anders bzw größer.
Auch überprüfen ob die checkinstall.sh irgendwas vermisst.

<edit>
#PB_Text_Right ist entweder Windows-Only oder sogar nur für TextGadget, jedenfalls ist es nicht zu StringGadget dokumentiert in meiner Linux PB Help.

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Zuletzt geändert von #NULL am 12.07.2018 15:53, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum sieht ein Gui unter Linux nicht schön aus?(Anfänge
BeitragVerfasst: 12.07.2018 15:50 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Bei mir sieht es gut aus. Allerdings gibt es die Konstante #PB_Text_Right nicht für das StringGadget, die gilt nur für das TextGadget. Dass das unter Windows funktioniert, ist Zufall.
Bild

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum sieht ein Gui unter Linux nicht schön aus?(Anfänge
BeitragVerfasst: 12.07.2018 16:35 
Offline
Benutzeravatar

Registriert: 25.01.2005 12:19
Wie NicTheQuick schon gesagt hat, darf die Konstante #PB_Text_Right nur für TextGadgets verwendet werden. Für StringGadgets gibt es in Windows die Konstante #ES_RIGHT, die zufällig denselben Wert 2 wie #PB_Text_Right hat. In Linux muss man dieses Problem anders lösen. Deshalb habe ich in meinem modifizierten Beispiel das Konstrukt CompilerSelect..CompilerEndSelect verwendet, damit abhängig vom verwendeten Betriebssystem die korrekte Lösung verwendet wird:
Code:
OpenWindow(0, 0, 0, 500, 400, "GUI Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowColor(0, $EAD1B9)

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Linux
    ImportC ""
      gtk_entry_set_alignment(*Entry.GtkEntry, Alignment.F)
    EndImport

    StringGadget(1, 30, 20, 80, 22, "0", #PB_String_ReadOnly | #PB_String_Numeric)
    gtk_entry_set_alignment(GadgetID(1), 1)
  CompilerCase #PB_OS_Windows
    StringGadget(1, 30, 20, 80, 22, "0", #PB_String_ReadOnly | #PB_String_Numeric | #ES_RIGHT)
CompilerEndSelect

ButtonGadget(2, 200, 20, 80, 25, "Connect")

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow


Das Ändern der Hintergrundfarbe ist in Linux auf Grund des von PureBasic standardmäßig verwendeten GTK3-Frameworks heikel: der PureBasic-Befehl SetWindowColor() funktioniert abhängig von der verwendeten Linux-Distribution und der installierten Version von GTK3 teilweise nicht. Dies ist nicht die Schuld von PureBasic, sondern die der GTK3-Entwickler, die mehrfach die dazu benötigten internen Funktionen abgeändert haben. Der einfachste Weg zu einem funktionierenden SetWindowColor()-Befehl besteht darin, wie von #NULL vorgeschlagen in der Menüleiste auf Compiler > Compiler Options... zu klicken und im Reiter "Compiler Options" hinter "Library Subsystem:" den Eintrag "gtk2" (ohne Anführungszeichen) vorzunehmen, damit das ältere GTK2-Framework verwendet wird.

Wenn man unbedingt das GTK3-Framework benutzen will oder muss, kann man mit dem folgenden auf 16 verschiedenen Linux-Distributinen erfolgreich getesteten Programm die Hintergrundfarbe des Fensters abändern:
Code:
; Durchgeführte Tests mit PB 5.62 x86:
; ------------------------------------
; + Bodhi Linux 4.5.0 mit Moksha 0.2.1 und GTK 3.18.9
; + Debian 8 mit Xfce und GTK 3.14.5
; + Elementary OS 0.2.1 'Luna' mit Pantheon und GTK 3.4.2
; + Fedora 27 mit Gnome 3 und GTK 3.22.26
; + Kubuntu 12.04 mit KDE 4 und GTK 3.4.2
; + Kubuntu 14.04 mit KDE 4 und GTK 3.10.8
; + Kubuntu 16.04 mit KDE 5.18.0 und GTK 3.18.9
; + Linux Mint 19 'Tara' mit Cinnamon und GTK 3.22.30
; + Lubuntu 14.04 mit LXDE und GTK 3.10.8
; + OpenSuSE 13.2 mit KDE 4.14.9 und GTK 3.14.15
; + PCLinuxOS 2014.05 MiniMe mit KDE 4 und GTK 3.14.14
; + Ubuntu 17.10 mit Gnome 3 unter Wayland (Unity Theme) und GTK 3.22.25
; + Ubuntu 17.10 mit Gnome 3 unter X.org (Unity Theme) und GTK 3.22.25
; + Ubuntu Budgie 17.10 mit Budgie 10.4 und GTK 3.22.25
; + Xubuntu 16.04 mit Xfce und GTK 3.18.9
; + Xubuntu 18.04 mit Xfce und GTK 3.22.30

EnableExplicit

CompilerIf Subsystem("gtk2")
  MessageRequester("Error",
    "Sorry, this code only works in GTK+ 3!")
  End
CompilerElse
  ImportC ""
    gtk_css_provider_load_from_data(*CSSProvider, CSSData.P-UTF8, Length.I,
      *Error.GError)
    gtk_css_provider_new()
    gtk_style_context_add_provider(*StyleContext, *StyleProvider, Priority.I)
    gtk_widget_get_style_context(*Widget.GtkWidget)
  EndImport
 
  #GTK_STYLE_PROVIDER_PRIORITY_USER = 800

  Define ContainerWidget.I
  Define CSSProvider.I
  Define CSSData.S
  Define GTK3MinorVersion.I

  Procedure.I GetGTK3MinorVersion()
    Protected GTK3Version.S
    Protected GTK3MinorVersion.I
    Protected ProgramID.I

    ProgramID = RunProgram("pkg-config", "--modversion gtk+-3.0", "",
      #PB_Program_Open | #PB_Program_Read)

    If ProgramID
      GTK3Version = ReadProgramString(ProgramID)
      SetWindowTitle(0, "Current GTK version: " + GTK3Version)
      GTK3MinorVersion = Val(StringField(GTK3Version, 2, "."))
      CloseProgram(ProgramID)
    EndIf

    ProcedureReturn GTK3MinorVersion
  EndProcedure

  OpenWindow(0, 100, 100, 350, 230, "")

  GTK3MinorVersion = GetGTK3MinorVersion()

  If GTK3MinorVersion > 15
   CSSData = "window.background {background-color: yellow;}"
   ContainerWidget = WindowID(0)
  Else
   CSSData = "GtkLayout {background-color: yellow}"
   ContainerWidget = g_list_nth_data_(gtk_container_get_children_(WindowID(0)), 0)
   ContainerWidget = g_list_nth_data_(gtk_container_get_children_(ContainerWidget), 0)
  EndIf

  CSSProvider = gtk_css_provider_new()
  gtk_css_provider_load_from_data(CSSProvider, CSSData, -1, 0)
  gtk_style_context_add_provider(gtk_widget_get_style_context(ContainerWidget),
    CSSProvider, #GTK_STYLE_PROVIDER_PRIORITY_USER)
  g_object_unref_(CSSProvider)

  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
CompilerEndIf


Zuletzt geändert von Shardik am 13.07.2018 11:36, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum sieht ein Gui unter Linux nicht schön aus?(Anfänge
BeitragVerfasst: 13.07.2018 09:14 
Offline

Registriert: 09.05.2018 09:47
Vielen, vielen Dank für die schnelle Antwortung und die detaillierte Erklärung! Es ist genau passiert, wie Ihr analysiert habt. Bei mir ist die Option der Compiler leer. #PB_Text_Right ist ein Zufall. Von Euch habe ich viel gelernt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum sieht ein Gui unter Linux nicht schön aus?(Anfänge
BeitragVerfasst: 13.07.2018 11:34 
Offline
Benutzeravatar

Registriert: 25.01.2005 12:19
Ich habe mein Programm zur Änderung der Hintergrundfarbe von Linux-Fenstern mit GTK3-Framework so umgeschrieben, dass man es als Prozedur mit der gewünschten RGB-Farbe aufrufen kann:
Code:
EnableExplicit

ImportC ""
  gtk_css_provider_load_from_data(*CSSProvider, CSSData.P-UTF8, Length.I,
    *Error.GError)
  gtk_css_provider_new()
  gtk_style_context_add_provider(*StyleContext, *StyleProvider, Priority.I)
  gtk_widget_get_style_context(*Widget.GtkWidget)
EndImport

#GTK_STYLE_PROVIDER_PRIORITY_USER = 800

Procedure.I GetGTK3MinorVersion()
  Protected GTK3Version.S
  Protected GTK3MinorVersion.I
  Protected ProgramID.I

  ProgramID = RunProgram("pkg-config", "--modversion gtk+-3.0", "",
    #PB_Program_Open | #PB_Program_Read)

  If ProgramID
    GTK3Version = ReadProgramString(ProgramID)
    GTK3MinorVersion = Val(StringField(GTK3Version, 2, "."))
    CloseProgram(ProgramID)
  EndIf

  ProcedureReturn GTK3MinorVersion
EndProcedure

Procedure SetWindowBackColor(WindowID.I, Color.I)
  Protected ContainerWidget.I
  Protected CSSProvider.I
  Protected CSSColor.S
  Protected CSSData.S
  Protected GTK3MinorVersion.I

  CSSColor = "#" + RSet(Hex(Red(Color)), 2, "0") +
    RSet(Hex(Green(Color)), 2, "0") + RSet(Hex(Blue(Color)), 2, "0")
  GTK3MinorVersion = GetGTK3MinorVersion()

  If GTK3MinorVersion > 15
    CSSData = "window.background {background-color: " + CSSColor + ";}"
    ContainerWidget = WindowID(WindowID)
  Else
    CSSData = "GtkLayout {background-color: " + CSSColor + ";}"
    ContainerWidget = g_list_nth_data_(gtk_container_get_children_(WindowID(WindowID)), 0)
    ContainerWidget = g_list_nth_data_(gtk_container_get_children_(ContainerWidget), 0)
  EndIf

  CSSProvider = gtk_css_provider_new()
  gtk_css_provider_load_from_data(CSSProvider, CSSData, -1, 0)
  gtk_style_context_add_provider(gtk_widget_get_style_context(ContainerWidget),
    CSSProvider, #GTK_STYLE_PROVIDER_PRIORITY_USER)
  g_object_unref_(CSSProvider)
EndProcedure

OpenWindow(0, 100, 100, 350, 230, "Window with custom background color")
SetWindowBackColor(0, $EAD1B9)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum sieht ein Gui unter Linux nicht schön aus?(Anfänge
BeitragVerfasst: 27.07.2018 13:26 
Offline

Registriert: 09.05.2018 09:47
Shardik, ich habe Deinen Code probiert. Das hat super funktioniert! :D :allright: Vielen Dank! noch eine Frage:

Ich habe ein GUI implementiert, aber wenn ich die Einstellung der Themen von Linux geändert habe, dann wurde einige Sachen des GUI-Programmes auch geändert, wie z.B. die Höhegröße des ButtonGadget wurde verkleinert, dann wurde die Beschriftung nicht vollständig angezeigt.

Gibt es eine Möglichkeit, die Veränderung zu verhindern, ob man die Themen von Linux geändert hätte?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Warum sieht ein Gui unter Linux nicht schön aus?(Anfänge
BeitragVerfasst: 30.07.2018 22:07 
Offline
Benutzeravatar

Registriert: 25.01.2005 12:19
Mit verschiedenen Themen unter Linux ist das leider so eine Sache. Ich benutze zum Testen grundsätzlich immer nur das voreingestellte Standard-Thema einer Distribution. Leider enthalten viele auswählbare Themen noch Fehler und sind teilweise nicht ganz ausgereift. Es gibt im englischen Unterforum "Bugs - Linux" eine ganze Reihe gemeldeter Fehler, die auf fehlerbehaftete Themen zurückzuführen sind und die Fred deshalb nicht beheben kann/will, weil dies Aufgabe der Entwickler des jeweiligen Themas ist. Und in Verbindung mit GTK3, das von seiner Philosophie eigentlich nicht zu PureBasic passt (siehe Blog-Eintrag "Enter GTK3" von Fred), dürften diese Fehler noch gehäuft auftreten. Wenn einem aber ein bestimmtes Thema unheimlich gut gefällt, dann sollte man den Entwicklern dieses Themas helfen, indem man versucht, Fehler in diesem Thema zu finden und Verbesserungsvorschläge/Fehlerbehebungen an die Entwickler senden...


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye