[英]Gtk set_tab_reorderable redraw label
我是pygtk的首次用戶。 我已經修改了gtk文檔中的一些現有代碼,以添加標簽頁拖動功能,但標簽在拖動時不會重繪,而是變為白色。 如何重繪?
#!/usr/bin/env python
# example notebook.py
import gtk
class NotebookExample:
# This method rotates the position of the tabs
def rotate_book(self, button, notebook):
notebook.set_tab_pos((notebook.get_tab_pos()+1) %4)
# Add/Remove the page tabs and the borders
def tabsborder_book(self, button, notebook):
tval = gtk.FALSE
bval = gtk.FALSE
if self.show_tabs == gtk.FALSE:
tval = gtk.TRUE
if self.show_border == gtk.FALSE:
bval = gtk.TRUE
notebook.set_show_tabs(tval)
self.show_tabs = tval
notebook.set_show_border(bval)
self.show_border = bval
# Remove a page from the notebook
def remove_book(self, button, notebook):
page = notebook.get_current_page()
notebook.remove_page(page)
# Need to refresh the widget --
# This forces the widget to redraw itself.
notebook.draw((0,0,-1,-1))
def delete(self, widget, event=None):
gtk.mainquit()
return gtk.FALSE
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("delete_event", self.delete)
window.set_border_width(10)
table = gtk.Table(3,6,gtk.FALSE)
window.add(table)
# Create a new notebook, place the position of the tabs
notebook = gtk.Notebook()
notebook.set_tab_pos(gtk.POS_TOP)
table.attach(notebook, 0,6,0,1)
notebook.show()
self.show_tabs = gtk.TRUE
self.show_border = gtk.TRUE
# Let's append a bunch of pages to the notebook
for i in range(5):
bufferf = "Append Frame %d" % (i+1)
bufferl = "Page %d" % (i+1)
frame = gtk.Frame(bufferf)
frame.set_border_width(10)
frame.set_usize(100, 75)
frame.show()
label = gtk.Label(bufferf)
frame.add(label)
label.show()
label = gtk.Label(bufferl)
notebook.append_page(frame, label)
notebook.set_tab_reorderable(frame, True)
# Now let's add a page to a specific spot
checkbutton = gtk.CheckButton("Check me please!")
checkbutton.set_usize(100, 75)
checkbutton.show ()
label = gtk.Label("Add page")
notebook.insert_page(checkbutton, label, 2)
# Now finally let's prepend pages to the notebook
for i in range(5):
bufferf = "Prepend Frame %d" % (i+1)
bufferl = "PPage %d" % (i+1)
frame = gtk.Frame(bufferf)
frame.set_border_width(10)
frame.set_usize(100, 75)
frame.show()
label = gtk.Label(bufferf)
frame.add(label)
label.show()
label = gtk.Label(bufferl)
notebook.prepend_page(frame, label)
# Set what page to start at (page 4)
notebook.set_page(3)
# Create a bunch of buttons
button = gtk.Button("close")
button.connect("clicked", self.delete)
table.attach(button, 0,1,1,2)
button.show()
button = gtk.Button("next page")
button.connect("clicked", notebook.next_page)
table.attach(button, 1,2,1,2)
button.show()
button = gtk.Button("prev page")
button.connect("clicked", notebook.prev_page)
table.attach(button, 2,3,1,2)
button.show()
button = gtk.Button("tab position")
button.connect("clicked", self.rotate_book, notebook)
table.attach(button, 3,4,1,2)
button.show()
button = gtk.Button("tabs/border on/off")
button.connect("clicked", self.tabsborder_book, notebook)
table.attach(button, 4,5,1,2)
button.show()
button = gtk.Button("remove page")
button.connect("clicked", self.remove_book, notebook)
table.attach(button, 5,6,1,2)
button.show()
table.show()
window.show()
def main():
gtk.mainloop()
return 0
if __name__ == "__main__":
NotebookExample()
main()
該示例有點錯誤(下一個和上一個按鈕對我不起作用,因為給回調函數提供了很多參數),但是否則,移動任何“頁面x”(而非“ PPage x”)頁面都可以正常工作。 我正在GNU / Linux(Mageia 3)下使用GTK 2.24.17。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.