Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 29 Mär 2015, 21:31 
Offline
Nuby

Registriert: 29 Mär 2015, 20:46
Beiträge: 3
Hallo zusammen,

ich möchte mit ruby und tk eine GUI ersellen bei der eine größere Menge an Checkbuttons in einem BWidget::ScrollableFrame angezeigt werden. Dieses muss ja so wie ich es verstanden habe innerhalb eines BWidget::ScrolledWindow erstellt werden. Nun zu meinem Problem... Für Testzwecke wollte ich die Größe des ScrollableFrame auf 100 x 100 px einstellen. Das TkRoot wird aber immer auf die entsprechende benötigte Größe erweitert um alle CheckButtons anzuzeigen. Das ist so nicht gewollt. Es soll durch die Liste an CheckButtons gescrollt werden können.

Hier ist eine vereinfachte Version meiner Klasse:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env ruby

require 'tk'
require 'tkextlib/bwidget'

class TestClass < TkRoot

attr_reader :checkbutton

def initialize(*args)
minsize(800, 400)

@checkbutton = []
for i in 0..29
@checkbutton.push({:name => "checkbutton #{i}"})
end
createGUI()
end

def createGUI
TkLabel.new(self, :text => 'first label').grid({:column => 0, :row => 0, :sticky => 'w'})

scrolledwindow = Tk::BWidget::ScrolledWindow.new(self).grid({:column => 0, :row => 1, :sticky => 'w'})
scrolledwindow.auto('none') # want to see if scrollbars are attached correctly

scrollframe = Tk::BWidget::ScrollableFrame.new(scrolledwindow).grid({:column => 0, :row => 0, :sticky => 'w'})
scrollframe.height(100)
scrollframe.width(100)

# leads to error: /usr/lib/ruby/1.9.1/tk.rb:215:in `class_eval': window name "frame" already exists in parent (RuntimeError)
#sftest = scrollframe.get_frame

scrolledwindow.set_widget(scrollframe)

@checkbutton.each_with_index { |cb, index|
TkCheckButton.new(scrollframe, :text => cb[:name]).grid({:column => 0, :row => index, :sticky => 'w'})
}

TkLabel.new(self, :text => 'second label').grid({:column => 1, :row => 0, :sticky => 'w'})
end
end

@test = TestClass.new
@test.mainloop


Sieht dann so aus:

Dateianhang:
Dateikommentar: Screenshot
Screenshot.jpg
Screenshot.jpg [ 69.96 KiB | 5844-mal betrachtet ]


Ein Ansatzpunkt habe ich noch hier gefunden: http://stackoverflow.com/questions/4531956/how-to-set-the-maximum-size-of-bwidgets-scrolledwindow

Da wird sich mit getframe nochmal ein frame vom ScrollableFrame ermittelt. getframe gibt es in meiner Installation allerdings nicht. Ich habe nur die Variante get_frame.

Wenn ich allerdings versuche am ScrollableFrame get_frame aufzurufen wirft tk nen Fehler den ich nicht nachvollziehen kann:




/usr/lib/ruby/1.9.1/tk.rb:215:in `class_eval': window name "frame" already exists in parent (RuntimeError)


Hat jemand eine Idee wie ich tk dazu überreden kann die 100 x 100 Pixel einzuhalten?

greetz

gg


Dateianhänge:
Dateikommentar: Quellcode
test.rb [1.22 KiB]
336-mal heruntergeladen
Nach oben
 Profil  
 
BeitragVerfasst: 31 Mär 2015, 10:57 
Offline
Nuby

Registriert: 29 Mär 2015, 20:46
Beiträge: 3
Kleines Update: Solange kein CheckButton hinzugefügt wurde stimmt die Größe. Erst bei hinzufügen wird die Größe des ScrollableFrame so abgeändert das es der Größe des CheckButtons entspricht. Wie kann ich verhindern, dass Tk die Größe ändert?


Nach oben
 Profil  
 
BeitragVerfasst: 01 Apr 2015, 23:01 
Offline
Nuby

Registriert: 29 Mär 2015, 20:46
Beiträge: 3
Ok... Anscheinend gibt es ein kleines Problem bei der genutzten Config/Installation.

Ich habe testhalber mal folgendes versucht:

#!/usr/bin/env ruby1.8

Und dann funktioniert auch

sftest = scrollframe.get_frame

Dann füge ich die CheckButtons sftest hinzu und siehe da... Ich kann durch eine Liste an Checkbuttons scrollen...

greetz

gg


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

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

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


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: