2016-08-26 1 views
0

私はtclノートブックを作成しました。ファイルが大きすぎると2つのタブがあり、スクロールできません。ここで自分のコードを共有する。 このコードを実行するには、2つのファイル(Warning.txtとError.txt)が必要です。このコードを実行する前に、同じディレクトリに配置してください。 Error.txtとWarning.txtという2つのファイルを作成してください。 いくつかのコンテンツを約10,000行にします。ノートブックでスクロールダウンできません

#!/usr/bin/wish -f 
# 
package require Tk 

proc noteb {} { 
    global rundir logfile 
    frame .lpo 
    pack .lpo -side top -fill both -expand true 
    #cd $rundir 
    set ft [exec grep -c Warning ./Warning.txt] 
    puts $ft 
    set ert [exec grep -c Error ./Error.txt] 
    puts $ert 
    pack [frame .fa] -fill both -side top 
    pack [ttk::notebook .fa.nb] -fill both 
    set gt "Errors" 
    set bt "Warnings" 
    set delim ":" 
    set rt [concat [string trim $bt][string trim $delim][string trim $ft]] 
    set dt [concat [string trim $gt][string trim $delim][string trim $ert]] 

    if {$ft > 0} { 
     .fa.nb add [frame .fa.nb.f1] -text $rt 
    } else { 
     .fa.nb add [frame .fa.nb.f1] -text "Warnings" 
    } 
    pack [frame .fa.nb.f1.f11] -side top -fill both -expand true 
    pack [text .fa.nb.f1.f11.t1 -bg LightYellow -borderwidth 2 -width 80 -height 6 -relief raised -setgrid true ] -side left -fill both -expand true 
    scrollbar .fa.nb.f1.f11.scroll -command {.fa.nb.f1.f11.t1 yview} 
    pack .fa.nb.f1.f11.scroll -side right -fill y 
    set fp1 [open Warning.txt r] 
    set v [read $fp1] 
    .fa.nb.f1.f11.t1 insert 1.0 $v 
    close $fp1 

    if {$ert > 0} { 
     .fa.nb add [frame .fa.nb.f2] -text $dt 
    } else { 
     .fa.nb add [frame .fa.nb.f2] -text "Errors" 
    } 

    pack [frame .fa.nb.f2.f11] -side top -fill both -expand true 
    pack [text .fa.nb.f2.f11.t1 -bg LightYellow -borderwidth 2 -width 80 -height 6 -relief raised -setgrid true ] -side left -fill both -expand true 
    scrollbar .fa.nb.f2.f11.scroll -command {.fa.nb.f2.f11.t1 yview} 
    pack .fa.nb.f2.f11.scroll -side right -fill y 
    set fp [open Error.txt r] 
    set c [read $fp] 
    .fa.nb.f2.f11.t1 insert 1.0 $c 
    close $fp 
} 

button .mn -text summary -command {noteb} 
pack .mn -side left 

答えて

1

テキストウィジェットで-yscrollオプションを設定するとうまくいくと思います。

2

これらの行では、テキストウィジェットについてはスクロールバーに指示しますが、スクロールバーについてのテキストウィジェットは指示しません。あなたは両方をする必要があります。

pack [text .fa.nb.f1.f11.t1 -bg LightYellow -borderwidth 2 -width 80 -height 6 -relief raised -setgrid true ] -side left -fill both -expand true 
scrollbar .fa.nb.f1.f11.scroll -command {.fa.nb.f1.f11.t1 yview} 
pack .fa.nb.f1.f11.scroll -side right -fill y 

代わりにこのなろう:私は実際に代わりにこれを行うに傾いているはずだけど

text .fa.nb.f1.f11.t1 -bg LightYellow -borderwidth 2 -width 80 -height 6 \ 
     -relief raised -setgrid true -yscroll {.fa.nb.f1.f11.scroll set} 
scrollbar .fa.nb.f1.f11.scroll -command {.fa.nb.f1.f11.t1 yview} 

pack .fa.nb.f1.f11.t1 -side left -fill both -expand true 
pack .fa.nb.f1.f11.scroll -side right -fill y 

:変数にコンテナウィジェット名を置く

set w .fa.nb.f1.f11 
text $w.t1 -bg LightYellow -borderwidth 2 -width 80 -height 6 -relief raised \ 
     -setgrid true -yscroll [list $w.scroll set] 
scrollbar $w.scroll -command [list $w.t1 yview] 

pack $w.t1 -side left -fill both -expand true 
pack $w.scroll -side right -fill y 

があなたを保つことができますコードをより賢明にし、テキストとスクロールバーが関連していることをより明確にします。 (必要に応じて、コードをリファクタリングすることも容易になります)

関連する問題