Schrift
[thread]4818[/thread]

Radiobuttons



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Kean
 2004-08-19 16:30
#42499 #42499
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Ich erzeuge mit dem folgenden Code zwei Radiobuttons. Sie werden aber nicht angezeigt. Wenn ich sie aus dem Frame rausnehmen dann läuft es aber.

my $radioframe = $import->Frame()->place();
my $Radiobutton1 = $radioframe->Radiobutton(
-text => " (HINZUFÜGEN) Neue Schülerdaten zu lokaler Datenbank hinzufügen",
-anchor => 'w'
)->place( -x => 40, -y => 88, -height => 24, -width => 472);

my $Radiobutton2 = $radioframe->Radiobutton(
-text => " (ÜBERSCHREIBEN) Lokale Schülerdatenbank durch neue Schülerdaten ersatzen",
-anchor => 'w'
)->place( -x => 40, -y => 113, -height => 24, -width => 472);


Woran kann das liegen??? Vieleicht an place()??
Crian
 2004-08-19 16:42
#42500 #42500
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Es liegt an der fehlenden Variablen und dem fehlenden Wert.

Schau mal hier: Kapitel über Radiobuttons im Tk-Tutorial (Wiki)

Code: (dl )
1
2
3
4
5
6
7
8
$parent->Radiobutton(-text     => "Text neben dem Radiobutton",
                     -variable => \$auswahlvariable,
                     -value    => 1, # Wert den die Variable bekommt wenn dieser Radiobutton aktiviert wird.
                    )->pack/place/grid();
$parent->Radiobutton(-text     => "anderer Text neben dem Radiobutton",
                     -variable => \$auswahlvariable,
                     -value    => 2, # Wert den die Variable bekommt wenn dieser Radiobutton aktiviert wird.
                    )->pack/place/grid()


Außerdem solltest Du die Auswahlvariable noch initialisieren, damit auch zu Anfang schon ein Radiobutton aktiviert ist:

$auswahlvariable = 1;\n\n

<!--EDIT|Crian|1092919711-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Kean
 2004-08-19 17:30
#42501 #42501
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Vielen Vielen DANK :)

Ohne deine Hilfe hätte das nicht so schnell geklappt.
Wenn man mal die zusammenhänge kennt ist es auch logisch.
ptk
 2004-08-19 17:40
#42502 #42502
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bitte nicht ->place() verwenden. Und wenn ja, solltest du sorgen, dass das Skript niemals die Festplatte deines eigenen Computers verlaesst. Erklaerung auf Anfrage.
Crian
 2004-08-19 17:47
#42503 #42503
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Warum? Ich verwende es zwar nie, aber für SPezialanwendungen dachte ich, könnte man es verwenden? Dein Post klingt aber irgendwie ernst.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Kean
 2004-08-19 17:47
#42504 #42504
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Ja bitte Erklär mir deinen Einwand. Wollte das ganze eigendlich schon publizieren.
ptk
 2004-08-19 19:36
#42505 #42505
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das Problem mit festen Positionen ist, dass man sich nie sicher sein kann, dass eine GUI-Anwendung auf allen verwendeten Rechnern mit den verschiedenen Einstellungen und Betriebssystemen exakt gleich aussieht. Zeichensaetze sind unterschiedlich: unter Windows wird Arial verwendet, unter X11 Helvetica, auf Mac Geneva. Auch bei gleichen Zeichensaetzen koennen die Standardschriftgroessen unterschiedlich sein (siehe grosse/kleine Schriftarten bei Windows, oder unterschiedliche dpi-Einstellungen bei einem X11-Server). Man kann zwar die Zeichensatzgroesse mit negativen Punktangaben erzwingen (-font => "Helvetica -10"), aber das ist nicht gerade nett gegenueber Benutzern mit schlechten Augen, die vielleicht absichtlich eine groessere Schrift brauchen. Padding ist bei unterschiedlichen Betriebssystemen unterschiedlich, man schaue sich die Groesse eines Buttons bei Windows und X11 an, besonders der Zwischenraum zwischen Text und Rahmen.
Nicht zu letzt wird die Portierung auf andere Sprachen erschwert, wenn Labels und Buttons auf einmal zu wenig Platz haben.

Ich habe jedenfalls viel zu oft schlechte Beispiele gesehen (u.a. bei Java-, XForms-, Prima-, KDE-Programmen). Warum --- ich nutze X11 und nicht Windows, und ich habe meinem Monitor entsprechend die dpi-Zahl auf 75 und nicht auf 100 gesetzt. Wenn man grid oder pack verwendet, treten diese Probleme nicht auf.

place() hat seine Einsatzgebiete, aber diese sind sehr eingeschraenkt.
Kean
 2004-08-20 03:37
#42506 #42506
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Ich habe nun mein kleines sub soweit fertig mit den Radiobuttons. Hat alles schön geklappt. Allerdings fiel mir beim testen auf, dass wenn ich eine Datei auswähle welche nicht im Programm-Ordner ist, das die Radiobuttons dann ohne zutun wechseln. Hat das einen Grund???

Hier der Code:

Code: (dl )
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
sub import
{
my $import = $mw->Toplevel();
$import->title("Importieren");

my $auswahl_radio = 1;

my      $windowHeight       = "540";
my      $windowWidth        = "540";
my      $screenHeight       = $import->screenheight;
my      $screenWidth        = $import->screenwidth;
$import->geometry($windowWidth."x".$windowHeight);
$import->geometry("+".int($screenWidth/2 - $windowWidth/2)."+".int($screenHeight/2 - $windowHeight/2));

my $f1 = $import->LabFrame(-label => "Quelle",-labelside => 'acrosstop')->place(-x => 20,

                         -y    => 30,


 -height => 70, -width => 500

                         );

my $Label1 = $import->Label(-text => "Import von Daten:",-anchor => 'w')->place( -x => 21, -y => 10, -height => 21, -width => 493);

my $Label2 = $f1->Label(-text => "Quell-Datei:")->place( -x => 5, -y => 5, -height => 23, -width => 74);


my $ein_entry = $f1->Entry(-width => 50, -relief => "sunken")->place( -x => 79, -y => 5, -height => 24, -width => 224);

my $ein_btn = $f1->Button(-text    => 'Durchsuchen',
                          -relief => "raised",
                        -command =>
                            sub {
                                my $typen = [
                                    ['Datenbank',  '.dat' ],
                                    ['Alle Dateien', '*'    ],
                                ];
                                my $dn = $import->getOpenFile(-filetypes  => $typen,
                                                         );
                                if (defined $dn and $dn ne '') {
                                    $ein_entry->delete(0, 'end');
                                    $ein_entry->insert('end', $dn);
                                }
                            },
                       )->place( -x => 308, -y => 5, -height => 24, -width => 152);

my $radioframe = $import->Frame()->place(-x => 40, -y => 100, -height => 60, -width => 480);

my $Radiobutton1 = $radioframe->Radiobutton(
                                    -text => "  (HINZUFÜGEN)  Neue Daten hinzufügen",

    -variable => \$auswahl_radio,

    -value => 1,

    -anchor => 'w'
                                    )->place( -x => 5, -y => 5, -height => 24, -width => 472);

my $Radiobutton2 = $radioframe->Radiobutton(
                                    -text => "  (ÜBERSCHREIBEN) Lokale Daten durch neue Daten ersatzen",

    -variable => \$auswahl_radio,

    -value => 2,
                                    -anchor => 'w'
                                    )->place( -x => 5, -y => 25, -height => 24, -width => 472);

$hlist = $import->Scrolled( "HList",

-header => 1,

-columns => 3,

-scrollbars => 'ose',
        -width => 70,
        -selectbackground => '#539FFD',
              )->place( -x => 24, -y => 200, -height => 312, -width => 488);

$hlist->header('create', 0, -text => 'Nummer');
$hlist->header('create', 1, -text => 'Name');
$hlist->header('create', 2, -text => 'Status');

my $Label4 = $import->Label( -textvariable => \$var_status,
     -anchor => 'w',

 -foreground => 'red'

)->place( -x => 74, -y => 515, -height => 20, -width => 300);
$var_status = "";

my $Button2 = $import->Button(
                          -text => "Vorschau",
                          -relief => "raised",
  -command => sub {
   
   $hlist->delete('all');

   $var_status = "";

   $eintragnr = 0;

   $Datei_pfad = $ein_entry->get();

   if ( not -e $Datei_pfad ) { $var_status = "Die Datei existiert nicht oder kann nicht gelesen werden!"; return; }
       
   open (EINGABE, "<$Datei_pfad");

   @vorschau = <EINGABE>;

   close (EINGABE);

   print "@vorschau";

   foreach $einedatei (@vorschau)

{

@daten = split /->/, $einedatei;

chop $daten[2];

$hlist->add($eintragnr);

$hlist->itemCreate($eintragnr, 0, -text => "$daten[0]");

$hlist->itemCreate($eintragnr, 1, -text => "$daten[1]");
   
$hlist->itemCreate($eintragnr, 2, -text => "$daten[2]");

$eintragnr++;

}

  }
                          )->place( -x => 48, -y => 160, -height => 23, -width => 127);

my $Button3 = $import->Button(
                          -text => "Import starten",
                          -relief => "raised",
  -command => sub {
   
   $Datei_pfad = $ein_entry->get();

   if ( not -e $Datei_pfad ) { $var_status = "Die Datei existiert nicht oder kann nicht gelesen werden!"; return; }
       
   open (EINGABE, "<$Datei_pfad");

   @neuedaten = <EINGABE>;

   close (EINGABE);

   if ( $auswahl_radio == 1 ) #Hinzufügen

{

open (EINGABE, "<daten.dat");

@schuelerdaten = <EINGABE>;

close (EINGABE);

foreach $einedatei (@neuedaten)

{

@list = split /->/, $einedatei;

$test = $list[0];

foreach $einedatei2 (@schuelerdaten)

{

@list2 = split /->/, $einedatei2;

$test2 = $list2[0];

if ($test == $test2)

   {

   $var_status = "Fehler!! Eine der neuen Schülernummern ist bereits vergeben! ";

   $lbl_status->configure(-foreground => 'red');

   return;

   }

}

}

push @schuelerdaten, @neuedaten;

@schuelerdat = sort @schuelerdaten;

open (AUSGABE, ">daten.dat");

print AUSGABE @schuelerdat;

close (AUSGABE);

$var_status = "Die Daten wurden erfolgreich hinzugefügt!";
 
       $lbl_status->configure(-foreground => '#008000');

}

   if ( $auswahl_radio == 2 ) #Überschreiben

{

open (AUSGABE, ">daten.dat");

print AUSGABE @neuedaten;

close (AUSGABE);

$var_status = "Die Daten wurden erfolgreich ersetzt!";
 
       $lbl_status->configure(-foreground => '#008000');

}


  }
                          )->place( -x => 200, -y => 160, -height => 23, -width => 136);

my $Button4 = $import->Button(
                          -text => "Abbrechen",
                          -relief => "raised",
  -command => sub { $import->destroy() }
                          )->place( -x => 361, -y => 160, -height => 23, -width => 126);

my $Label3 = $import->Label(-text => "Status:",-anchor => 'w')->place( -x => 24, -y => 515, -height => 20, -width => 50);


$ein_btn->focus();
}


Bearbeitet von Crian: CODE-Tags spendiert\n\n

<!--EDIT|Crian|1092988009-->
Crian
 2004-08-20 11:50
#42507 #42507
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Irch -  irgendwie ist der Code grauslich formatiert, das finde ich sehr schwer zu lesen.

-> perldoc perlstyle

Ich nehme mal an, dass Du tabs verwendest zum Einrücken. Der CODE-Tag frisst leider das erste Whitespace, aber auch sonst gibt es gute Gründe das zu lassen und immer mit Spaces zu arbeiten (es gibt sogar eine Webseite extra dazu mit X Gründen, weiß leider nicht mehr, wo ich die gesehen hatte).\n\n

<!--EDIT|Crian|1092988252-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Kean
 2004-08-20 11:57
#42508 #42508
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Ja ich benutze Tabs. :)

Schau mir den teil in der perldoc mal an bei gelegenheit.

Und zu meinem Problem?? Keine Idee?
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2004-08-19 16:30.