📄 packbox.py
字号:
#!/usr/bin/env python# example packbox.pyimport pygtkpygtk.require('2.0')import gtkimport sys, string# Helper function that makes a new hbox filled with button-labels. Arguments# for the variables we're interested are passed in to this function. We do# not show the box, but do show everything inside.def make_box(homogeneous, spacing, expand, fill, padding): # Create a new hbox with the appropriate homogeneous # and spacing settings box = gtk.HBox(homogeneous, spacing) # Create a series of buttons with the appropriate settings button = gtk.Button("box.pack") box.pack_start(button, expand, fill, padding) button.show() button = gtk.Button("(button,") box.pack_start(button, expand, fill, padding) button.show() # Create a button with the label depending on the value of # expand. if expand == True: button = gtk.Button("True,") else: button = gtk.Button("False,") box.pack_start(button, expand, fill, padding) button.show() # This is the same as the button creation for "expand" # above, but uses the shorthand form. button = gtk.Button(("False,", "True,")[fill==True]) box.pack_start(button, expand, fill, padding) button.show() padstr = "%d)" % padding button = gtk.Button(padstr) box.pack_start(button, expand, fill, padding) button.show() return boxclass PackBox1: def delete_event(self, widget, event, data=None): gtk.main_quit() return False def __init__(self, which): # Create our window self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) # You should always remember to connect the delete_event signal # to the main window. This is very important for proper intuitive # behavior self.window.connect("delete_event", self.delete_event) self.window.set_border_width(10) # We create a vertical box (vbox) to pack the horizontal boxes into. # This allows us to stack the horizontal boxes filled with buttons one # on top of the other in this vbox. box1 = gtk.VBox(False, 0) # which example to show. These correspond to the pictures above. if which == 1: # create a new label. label = gtk.Label("HBox(False, 0)") # Align the label to the left side. We'll discuss this method # and others in the section on Widget Attributes. label.set_alignment(0, 0) # Pack the label into the vertical box (vbox box1). Remember that # widgets added to a vbox will be packed one on top of the other in # order. box1.pack_start(label, False, False, 0) # Show the label label.show() # Call our make box function - homogeneous = False, spacing = 0, # expand = False, fill = False, padding = 0 box2 = make_box(False, 0, False, False, 0) box1.pack_start(box2, False, False, 0) box2.show() # Call our make box function - homogeneous = False, spacing = 0, # expand = True, fill = False, padding = 0 box2 = make_box(False, 0, True, False, 0) box1.pack_start(box2, False, False, 0) box2.show() # Args are: homogeneous, spacing, expand, fill, padding box2 = make_box(False, 0, True, True, 0) box1.pack_start(box2, False, False, 0) box2.show() # Creates a separator, we'll learn more about these later, # but they are quite simple. separator = gtk.HSeparator() # Pack the separator into the vbox. Remember each of these # widgets is being packed into a vbox, so they'll be stacked # vertically. box1.pack_start(separator, False, True, 5) separator.show() # Create another new label, and show it. label = gtk.Label("HBox(True, 0)") label.set_alignment(0, 0) box1.pack_start(label, False, False, 0) label.show() # Args are: homogeneous, spacing, expand, fill, padding box2 = make_box(True, 0, True, False, 0) box1.pack_start(box2, False, False, 0) box2.show() # Args are: homogeneous, spacing, expand, fill, padding box2 = make_box(True, 0, True, True, 0) box1.pack_start(box2, False, False, 0) box2.show() # Another new separator. separator = gtk.HSeparator() # The last 3 arguments to pack_start are: # expand, fill, padding. box1.pack_start(separator, False, True, 5) separator.show() elif which == 2: # Create a new label, remember box1 is a vbox as created # near the beginning of __init__() label = gtk.Label("HBox(False, 10)") label.set_alignment( 0, 0) box1.pack_start(label, False, False, 0) label.show() # Args are: homogeneous, spacing, expand, fill, padding box2 = make_box(False, 10, True, False, 0) box1.pack_start(box2, False, False, 0) box2.show() # Args are: homogeneous, spacing, expand, fill, padding box2 = make_box(False, 10, True, True, 0) box1.pack_start(box2, False, False, 0) box2.show() separator = gtk.HSeparator() # The last 3 arguments to pack_start are: # expand, fill, padding. box1.pack_start(separator, False, True, 5) separator.show() label = gtk.Label("HBox(False, 0)") label.set_alignment(0, 0) box1.pack_start(label, False, False, 0) label.show() # Args are: homogeneous, spacing, expand, fill, padding box2 = make_box(False, 0, True, False, 10) box1.pack_start(box2, False, False, 0) box2.show() # Args are: homogeneous, spacing, expand, fill, padding box2 = make_box(False, 0, True, True, 10) box1.pack_start(box2, False, False, 0) box2.show() separator = gtk.HSeparator() # The last 3 arguments to pack_start are: # expand, fill, padding. box1.pack_start(separator, False, True, 5) separator.show() elif which == 3: # This demonstrates the ability to use pack_end() to # right justify widgets. First, we create a new box as before. box2 = make_box(False, 0, False, False, 0) # Create the label that will be put at the end. label = gtk.Label("end") # Pack it using pack_end(), so it is put on the right # side of the hbox created in the make_box() call. box2.pack_end(label, False, False, 0) # Show the label. label.show() # Pack box2 into box1 box1.pack_start(box2, False, False, 0) box2.show() # A separator for the bottom. separator = gtk.HSeparator() # This explicitly sets the separator to 400 pixels wide by 5 # pixels high. This is so the hbox we created will also be 400 # pixels wide, and the "end" label will be separated from the # other labels in the hbox. Otherwise, all the widgets in the # hbox would be packed as close together as possible. separator.set_size_request(400, 5) # pack the separator into the vbox (box1) created near the start # of __init__() box1.pack_start(separator, False, True, 5) separator.show() # Create another new hbox.. remember we can use as many as we need! quitbox = gtk.HBox(False, 0) # Our quit button. button = gtk.Button("Quit") # Setup the signal to terminate the program when the button is clicked button.connect("clicked", lambda w: gtk.main_quit()) # Pack the button into the quitbox. # The last 3 arguments to pack_start are: # expand, fill, padding. quitbox.pack_start(button, True, False, 0) # pack the quitbox into the vbox (box1) box1.pack_start(quitbox, False, False, 0) # Pack the vbox (box1) which now contains all our widgets, into the # main window. self.window.add(box1) # And show everything left button.show() quitbox.show() box1.show() # Showing the window last so everything pops up at once. self.window.show()def main(): # And of course, our main loop. gtk.main() # Control returns here when main_quit() is called return 0 if __name__ =="__main__": if len(sys.argv) != 2: sys.stderr.write("usage: packbox.py num, where num is 1, 2, or 3.\n") sys.exit(1) PackBox1(string.atoi(sys.argv[1])) main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -