⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu1.tk

📁 《Beginning linux programming》一书相应的源代码
💻 TK
字号:
#!/usr/bin/wish# First, we will create the main window components, including a text widget, with an# associated scrollbar, and a status widget, to display menu traversal and error messages.# We arrange these widgets on the screen using the grid command.# We will also create a new font named myFont.# We will use the menu to manipulate the font attributes so that the text in the text# widget will change its appearance.wm title . "Menu demonstration"wm iconname . "Menu demo"# create the basic UIscrollbar .yscroll -orient vertical -command ".text yview"font create myfont -family Courier -size 10 -weight bold -slant italic \    -underline 1 text .text -height 10 -width 40 -bg white -yscrollcommand ".yscroll set" -font myfontlabel .msg -relief sunken -bd 2 -textvariable message -anchor w -font "Helvetica 10".text insert end "Menu Demonstration!"# manage the widgets using the grid geometry manager.grid .text -row 0 -column 0  -sticky "news" grid .yscroll -row 0 -column 1 -sticky "ns"grid .msg -row 1 -columnspan 2 -sticky "ew" grid columnconfigure . 0 -weight 1grid rowconfigure . 0 -weight 1# Next, we will develop callback functions, which will be associated with the menu entries.# The SetBg procedure will change the background color of the text.# ConfigureFont will change the attributes of myFont.# InsertImage will insert the named bitmap into the text buffer.# The InsertImage procedure has a side effect.# If the named bitmap already exists in the text buffer, it will get deleted and a# new bitmap will be inserted.# The OpenFile procedure will prompt the user for a file and if the user selects a file,# its contents will be displayed in the text widget.# procedure to set text background colorproc SetBg {} {    global background    .text configure -bg $background}# procedure to configure the previously created font.proc ConfigureFont {} {    global bold italic underline    expr {$bold ? [set weight bold]: [set weight normal]}    expr {$italic? [set slant italic]: [set slant roman]}    expr {$underline? [set underline 1]: [set underline 0]}    font configure myfont -weight $weight -slant $slant -underline $underline}# Procedure to insert images in the text widgetproc InsertImage {image} {    catch {destroy .text.$image}        label .text.$image -bitmap $image    .text window create end -window .text.$image}# Callback for open menubuttonproc OpenFile {} {    global message    set file [tk_getOpenFile]    if {$file == ""}  {        set message "No file selected..."        return;    }    .text delete 0.0 end    set fd [open $file "r"]     while {[eof $fd] != 1} {        gets $fd line        .text insert end $line        puts $line        update idletasks    }    close $fd}# Next, we will focus on the menu widget and its components.# First, we will create a menu that will become the menu bar for the toplevel window. # create toplevel menumenu .menu -tearoff 0  -type menubar# Create File menuset m .menu.file# We will add a File submenu with open and exit entries.# The open entry will prompt the user with an open file dialog.# If the user chooses a file, that file will be displayed in the text widget using# the OpenFile procedure.# The exit menu entry is used to exit the application.## As you can see, Tk does not create a default global binding for the menu entry just# by using the -accelerator menu entry option.# We have to explicitly create the binding in order for the accelerator to take effect.menu $m -tearoff 0.menu add cascade -label "File" -menu $m -underline 0set modifier Meta$m add command -label "Open..." -accelerator $modifier+o -command "OpenFile" -underline 0 -command OpenFile bind . <$modifier-o> "OpenFile"$m add separator$m add command -label "Exit..." -accelerator $modifier+x -command "exit" -underline 0bind . <$modifier-x> "exit"# We next add an Option submenu to the main menu.# The Options submenu contains background and font cascade menus.# A background cascaded menu contains a group of radio buttons to change the background# color of the text widget.# The Font cascade menu provides a group of check buttons to manipulate myfont menu attributes.# Create options menuset m .menu.optionsmenu $m -tearoff 1.menu add cascade -label "Options" -menu $m -underline 0 $m add cascade -label "Background" -menu .menu.options.bg -underline 0$m add cascade -label "Font" -menu  .menu.options.font -underline 0# create Radio button cascade menuset m .menu.options.bgmenu $m -tearoff 0$m add radio  -label "Red" -background red -variable background -value red \    -command SetBg$m add radio  -label "Yellow" -background yellow -variable background \    -value yellow -command SetBg$m add radio  -label "Blue" -background blue -variable background -value blue \    -command SetBg$m add radio  -label "White" -background white -variable background -value white \    -command SetBg$m invoke 3# Insert option button cascade Menuset m .menu.options.fontmenu $m -tearoff 0$m add check -label "Bold" -variable bold -command ConfigureFont$m add check -label "Italic" -variable italic -command ConfigureFont$m add check -label "underline" -variable underline -command ConfigureFont$m invoke 3# As you can see from the above code, the entries in a menu can be configured to have# different backgrounds and foregrounds, as well as other standard widget options.# Next, we will proceed to add yet another cascade entry to the main menu to insert# bitmaps into the text widget. As explained earlier, these bitmap entry commands have# a side effect-that only one instance of these bitmaps can be present in the text# widget at any given time.# Create insert menu optionset m .menu.insertmenu $m -tearoff 0.menu add cascade -label "Insert" -menu $m -underline 0foreach i {info questhead error} {    $m add command -bitmap $i -command "puts {You invoked the $i bitmap}" -hidemargin 1 -command "InsertImage $i"}$m entryconfigure 2 -columnbreak 1# One thing to observe from the above code snippet is that entries in a menu can be# arranged in a tabular fashion using the entryconfigure command with the -columnbreak option.# Finally, we will attach the menu to the toplevel widget to make it the default menu bar.# We also make use of the <<MenuSelect>> virtual event, which gets fired when any menu or# its entries are selected.# The <<MenuSelect>> virtual event will display a message in the message label,# which indicates that a particular entry has been selected.# Attach the menu to the toplevel menu. configure -menu .menu#  Bind  global tagsbind Menu <<MenuSelect>> {    global message    if {[catch {%W entrycget active -label} label]} {	set label "    "    }    set message "You have selected $label..."}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -