Define multiple variables in one panel?
Hi,
Is it possible to create one panel for the user to define variables or sets?
Alternatively, instead of a panel - is it possible to create a pop-up window with a table that requires input for each variable before you can continue?
At the moment I am using this kind of code for the user to input values:
set value 1 [hm_getint 'value 1' 'value 1']
set value 2 [hm_getint 'value 2' 'value 2']
However this gets very tedious after having to go through 5+ panels clicking proceed each time
Thanks
Answers
-
Hi,
if you don't want to click 'proceed' many times, using hm_getstring
example:
set list_of_values [hm_getstring 'Values = ' 'Enter values separated by space' ]
lassign $list_of_values value1 value2 ...
0 -
Thanks tinh,
But what if the values aren't related to each other?
For example, I'm thinking about creating a utility to create PBUSH cards based off Huth formula. For this you need to input information such as the type of fastener (e.g. Bolt, Rivet), if the bolt is countersunk or protruding, type of Material (or input Young's Modulus and Shear modulus of bolt material), Diameter of Fastener.
It would be great if I could create a custom panel or input tk table with these options.
0 -
Hi
To create custom panel, use command hm_framework
To create tk table, use command table
at least, you can use if...else to control cases
Or make a toplevel, some entries to input values
Relevant commands are toplevel, frame, entry, label, pack, place, grid
Tk table is more complex
0 -
I've looked into your suggestions and I feel like the tk table is the best way.
I've just started trying to construct a table, and I'm getting some errors: namely, frame1 already exists in parent. Not sure where I have gone wrong...
#User Input hwt::CreateWindow mytoplevel \ -windowtitle 'Input Fastener Properties' \ -noGeometrySaving \ -cancelButton Cancel \ -acceptButton OK \ -acceptFunc applyFunction \ -defaultButton Accept \ -minsize 470 100 \ -post; proc applyFunction args {tk_messageBox -message 'Fastener Diameter Chosen: $::valueToPrint \ Fastener Type Chosen: $::fromPopDown'} set recess [::hwt::WindowRecess mytoplevel]; set section2 [label $recess.section2 \ -text 'Please Input Fastener Properties' \ -justify left \ -anchor nw \ -font [hwt::AppFont]]; pack $section2 -side top -anchor nw -pady 5; hwt::AddPadding $recess -side top -height [hwt::DluHeight 4]; set frame1 [frame $recess.frame1]; pack $frame1 -side top -anchor nw; hwt::AddPadding $frame1 -side left -width [hwt::DluWidth 4]; set EntryWidget [ AddEntry $recess.frame1 \ -textvariable valueToPrint \ -label 'Diamater:' \ -labelWidth 40 \ -entryWidth 20 \ -anchor nw\ -validate real\ -text 5 \ -withoutPacking]; pack $EntryWidget -side top -anchor nw -pady 5; AddPadding $frame1 -side top -hegiht [hwt::DluHeight 4]; set frame2 [frame $recess.frame2]; pack $frame2 -side top -anchor nw; AddPadding $frame2 -side top -height [hwt::DluHeight 4]; variable dropDownList; set dropDownList [list Bolt Rivet ]; set entry2 [ AddEntry $recess.frame2 \ -label 'Select Fastener Type:' -labelWidth 40 \ -text 'Bolt'\ -entryWidth 20 \ -listVar fromPopDown noTyping dropDownList \ -state normal ]; pack $entry2 -side top -anchor nw; AddPadding $recess.frame2 width 22 -side left;
0 -
Hi, at EntryWidget, change frame1 to entry1
At entry2, change frame2 to entry2
0 -
Altair Forum User said:
Hi, at EntryWidget, change frame1 to entry1
At entry2, change frame2 to entry2
Thanks tinh, this works.
I'm having trouble with the listvar. In the tk message box I want to report what the user has chosen (at the moment, this is really just a debugging thing for me to see if it works). It works OK with the text variable 'valueToPrint', but if I use 'dropDownList' then it shows both choices and not the one that the user has chosen. If I use 'fromPopDown' as the code above, it gives error reading as there's no such variable..
Also, somewhat unrelated... but how can you make your text appear on a new line in a tk message box? I thought this is what '\' does, but apparently not. I.e. I want the tk message box in the code above to looking like:
Fastener Diameter Chosen:
Fastener Type Chosen:
0 -
Altair Forum User said:
Thanks tinh, this works.
I'm having trouble with the listvar. In the tk message box I want to report what the user has chosen (at the moment, this is really just a debugging thing for me to see if it works). It works OK with the text variable 'valueToPrint', but if I use 'dropDownList' then it shows both choices and not the one that the user has chosen. If I use 'fromPopDown' as the code above, it gives error reading as there's no such variable..
Also, somewhat unrelated... but how can you make your text appear on a new line in a tk message box? I thought this is what '\' does, but apparently not. I.e. I want the tk message box in the code above to looking like:
Fastener Diameter Chosen:
Fastener Type Chosen:
Hi,
to pop up selected value, specify -textvariable when create entry by 'AddEntry' command
then selected value is assigned to this -textvariable
0 -
Ah thanks, I thought listvar and textvariable were doing the same thing.
One final thing.. how do I make the window close after the user presses OK?
Edit: Actually I will use tkmessageBox -type okcancel.
What I want is that if the user presses OK it will accept the variables and also close the main window where it asks for inputs. If the user presses cancel then it will close the tkmessageBox and revert back to the main window asking for the inputs.
I guess I need something else in the applyFunctrion procedure in order to close the main dialouge box when OK is pressed?
hwt::CreateWindow mytoplevel \
-windowtitle 'Input Fastener Properties' \
-noGeometrySaving \
-cancelButton Cancel \
-acceptButton OK \
-acceptFunc applyFunction \
-defaultButton Accept \
-minsize 470 100 \
-post;
proc applyFunction args {tk_messageBox -message 'Fastener Diameter Chosen: $::valueToPrint \
Fastener Type Chosen: $::fastType' -type okcancel}0 -
Hi,
proc applyFunction args {
set answer [tk_messageBox -message 'Fastener Diameter Chosen: $::valueToPrint \
Fastener Type Chosen: $::fastType' -type okcancel]if {$answer=='ok'} {UnpostWindow .mytoplevel}
}
0