Я работаю над программным обеспечением, помогающим студентам. Цель состоит в том, чтобы иметь интерактивное программное обеспечение. В настоящее время у меня есть первый интерфейс с кнопками селектора, которые должны показывать учебные пособия. Я могу показать первый учебник, но если я хочу использовать кнопки «Назад» или «Далее», это не сработает. Я не понимаю, почему. Когда я нажимаю кнопку, процедура называется, код выглядит следующим образом:Как использовать кнопки «Назад» и «Далее»?
proc loadBackground {} {
#variables
set ::i 0
set close 0
set bgColour "White"
set fd [open [pwd]/content/background r]
set ::data [split [read $fd] \n]
close $fd
#window definition
toplevel .fr
wm title .fr "Background"
wm geometry .fr 660x550+0+105
.fr configure -bg $bgColour
# define the main text zone
text .fr.txt -wrap word -yscroll {.fr.vscroll set} -highlightthickness 0
scrollbar .fr.vscroll -orient vertical -command {.fr.txt yview}
grid .fr.txt -column 0 -row 1 -sticky snwe
grid .fr.vscroll -column 1 -row 1 -sticky snwe
# define the canvas for interactive diagrams
canvas .fr.canv -bg #f8f8f8 -yscrollcommand {.fr.vscroll set} -scrollregion "0 0 750 750"
.fr.txt tag configure center -justify center
.fr.txt configure -font "times 12" -state disabled
.fr.vscroll configure -orient vertical -command {.fr.txt yview}
grid .fr.txt -column 0 -row 1 -sticky snwe
.fr.txt configure -state normal
.fr.txt delete 1.0 end
# title of section
label .fr.titl
.fr.titl configure -font "arial 20" -pady 10
grid .fr.titl -column 0 -row 0 -sticky swe
.fr.titl configure -background "White"
#text styles
.fr.txt tag configure Normal -font "times 12"
.fr.txt tag configure subTitle -font "times 14"
.fr.txt tag configure Titlec -font "times 16" -justify "center"
.fr.txt tag configure subTitlec -font "times 14" -justify "center"
.fr.txt tag configure subTitlecu -font "times 14" -justify "center" -underline on
.fr.txt tag configure Titlecu -font "times 16" -justify "center" -underline on
.fr.txt tag configure Title -font "times 16"
.fr.txt tag configure link -foreground blue -font "times 12"
.fr.txt tag configure right -foreground "forest green"
.fr.txt tag configure wrong -foreground red
.fr.txt tag configure enhance -background "light goldenrod"
.fr.txt tag configure rightenhance -background "light goldenrod" -foreground "forest green"
.fr.txt tag bind link <Enter> ".fr.txt configure -cursor hand1"
.fr.txt tag bind link <Leave> ".fr.txt configure -cursor arrow"
dispFile [lindex $::data $::i]
#buttons definition
frame .fr.bar
grid .fr.bar -row 2
button .fr.bar.bk -text "<< Back" -pady 5 -borderwidth 0 -command { dispFile [lindex $::data [expr $::i - 1]]}
pack .fr.bar.bk -padx 5 -pady 5 -side left -fill none
button .fr.bar.cl -text "Close" -pady 5 -borderwidth 0 -command { set close 1}
pack .fr.bar.cl -padx 5 -pady 5 -side left -fill none
button .fr.bar.nx -text "Next >>" -pady 5 -borderwidth 0 -command { dispFile [lindex $::data [expr $::i + 1]]}
pack .fr.bar.nx -padx 5 -pady 5 -side right -fill none
vwait close
destroy .fr
}
процедуру, чтобы отобразить учебник (написано в файле) является:
proc dispFile {name} {
set flname "[pwd]/Files/$name"
set infile [open $flname "r"]
set inEOF -1
set txln ""
set lkcount 0
set counter 0
while {[gets $infile inln] != $inEOF} {
switch $inln {
"<Title>" {
gets $infile inln
.fr.titl configure -text $inln
}
"<subTitle>" {
gets $infile inln
.fr.txt insert end "$inln\n" subTitle
}
"<subTitlec>" {
gets $infile inln
.fr.txt insert end "$inln\n" subTitlec
}
"<subTitlecu>" {
gets $infile inln
.fr.txt insert end "$inln\n" subTitlecu
}
"<Titlec>" {
gets $infile inln
.fr.txt insert end "$inln\n" Titlec
}
"<Titlecu>" {
gets $infile inln
.fr.txt insert end "$inln\n" Titlecu
}
"<Highlight>" {
gets $infile inln
.fr.txt insert end "$inln\n" Titlecu
}
"<hyperlink>" {
gets $infile inln
.fr.txt insert end "$inln" "link lk$lkcount"
.fr.txt insert end "\n" Normal
gets $infile inln
.fr.txt tag bind lk$lkcount <1> "openPDF Files/$inln"
incr lkcount
}
"<hypLink>" {
gets $infile inln
.fr.txt insert end "$inln" "link lk$lkcount"
.fr.txt insert end "\n" Normal
.fr.txt tag bind lk$lkcount <1> [list eval exec [auto_execok start] "$inln"]
incr lkcount
}
"<image>" {
gets $infile inln
.fr.txt insert end "\n"
set meh [image create photo -file [file join "Files/$inln"]]
.fr.txt insert end " " center
.fr.txt image create end -image $meh
.fr.txt insert end "\n"
}
"<test>" {
gets $infile inln
callTuto $inln
}
"<results>" {
gets $infile inln
DisplayResults
}
"<entry>" {
gets $infile inln
DispEntry
}
"<adv>" {
gets $infile inln
Advice
}
"<proc>" {
gets $infile inln
$inln
}
default {
set txln "$inln\n"
.fr.txt insert end $txln Normal
}
}
}
.fr.txt configure -state disabled
close $infile
}
Кто-то может помочь мне найти решение или ошибки?
Эта работа, чтобы изменить файл, но в текстовом фрейме есть что-то странное: первое содержимое файла остается, а часть следующего файла добавляется после первого. – PiXieBulles
'.fr.txt insert end' прикрепляет текст до конца. Ваша процедура dispFile должна сначала удалить весь текст. –