当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 无法使用 notebook.append_page 添加标签页,不知到问题出在哪里。
帖子发表于 : 2013-02-07 23:00 
头像

注册: 2008-06-23 15:19
帖子: 3051
地址: 北欧某国
系统: ���������
送出感谢: 21
接收感谢: 6
首先是程序的截图:
附件:
gedit 2-8.jpg
gedit 2-8.jpg [ 102.4 KiB | 被浏览 900 次 ]


这是一个文本编辑器。

在 __init__() 中执行 on_new() 后会多出一个标签,执行两次就多出两个标签,这个没有问题。但是我点击“新建”按钮后却没有反应。

根据 print 的反馈,点击“新建”按钮后,on_new() 的确执行了,但是我却看不到新建的标签,这是为什么?
[python]#!/usr/bin/python
#coding:utf8

from gi.repository import Gtk, Pango, GtkSource, Gdk
import os

class SearchDialog(Gtk.Dialog):
def __init__(self):
Gtk.Dialog.__init__(self, "Search", parent,
Gtk.DialogFlags.MODAL, buttons=(
Gtk.STOCK_FIND, Gtk.ResponseType.OK,
Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL
)
)

box = self.get_content_area()

label = Gtk.Label("查找:")
box.add(label)

self.entry = Gtk.Entry()
box.add(self.entry)

self.show_all()

class TextViewWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="TextView Examle")
self.set_default_size(560, 350)
self.create_notebook()
self.create_toolbar()

self.on_new()

self.set_style()

def create_toolbar(self):

button_new = Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW)
self.notebook.append_page(Gtk.Box(spacing=6), button_new)

button_open = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN)
self.notebook.append_page(Gtk.Box(spacing=6), button_open)

button_save = Gtk.ToolButton.new_from_stock(Gtk.STOCK_SAVE)
self.notebook.append_page(Gtk.Box(spacing=6), button_save)

button_print = Gtk.ToolButton.new_from_stock(Gtk.STOCK_PRINT)
self.notebook.append_page(Gtk.Box(spacing=6), button_print)

button_undo = Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO)
self.notebook.append_page(Gtk.Box(spacing=6), button_undo)

button_redo = Gtk.ToolButton.new_from_stock(Gtk.STOCK_REDO)
self.notebook.append_page(Gtk.Box(spacing=6), button_redo)

button_cut = Gtk.ToolButton.new_from_stock(Gtk.STOCK_CUT)
self.notebook.append_page(Gtk.Box(spacing=6), button_cut)

button_copy = Gtk.ToolButton.new_from_stock(Gtk.STOCK_COPY)
self.notebook.append_page(Gtk.Box(spacing=6), button_copy)

button_paste = Gtk.ToolButton.new_from_stock(Gtk.STOCK_PASTE)
self.notebook.append_page(Gtk.Box(spacing=6), button_paste)

button_find = Gtk.ToolButton.new_from_stock(Gtk.STOCK_FIND)
self.notebook.append_page(Gtk.Box(spacing=6), button_find)

button_replace = Gtk.ToolButton.new_from_stock(Gtk.STOCK_FIND_AND_REPLACE)
self.notebook.append_page(Gtk.Box(spacing=6), button_replace)

button_new.connect("clicked", self.on_new)
button_open.connect("clicked", self.on_open_file)

def create_notebook(self):
self.notebook = Gtk.Notebook()
self.add(self.notebook)

def on_button_clicked(self, widget, tag):
bounds = self.textbuffer.get_selection_bounds()
if len(bounds) != 0:
start, end = bounds
self.textbuffer.apply_tag(tag, start, end)

def on_editable_toggled(self, widget):
self.textview.set_editable(widget.get_active())

def on_activate(self, data=None):
window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
window.set_title("Gtk3 Python Example")
window.set_border_width(24)
label = Gtk.Label("Hello World!")
window.add(label)
window.show_all()
self.add_window(window)

def create_textview(self, notebook = None):
scrolledwindow = Gtk.ScrolledWindow()
scrolledwindow.set_hexpand(True)
scrolledwindow.set_vexpand(True)
#self.grid.attach(scrolledwindow, 0, 1, 2, 1)
tabLabel = Gtk.Label("无标题文档")
tabLabel.set_name("BEditTabLabel")
self.notebook.append_page(scrolledwindow, tabLabel)

# 这里是用的是 GtkSource,可以实现语法加亮的。
self.textview = BEditDocument()

self.textbuffer = self.textview.get_buffer()
self.textbuffer.set_text("This is some text inside of a Gtk.TextView. "
+ "Select text and click one of the buttons 'bold', 'italic', "
+ "or 'underline' to modify the text accordingly.")
scrolledwindow.add(self.textview)

self.tag_bold = self.textbuffer.create_tag("bold",
weight=Pango.Weight.BOLD)
self.tag_italic = self.textbuffer.create_tag("italic",
style=Pango.Style.ITALIC)
self.tag_underline = self.textbuffer.create_tag("underline",
underline=Pango.Underline.SINGLE)
self.tag_found = self.textbuffer.create_tag("found",
background="yellow")

# 可以设置背景颜色和背景的透明度了!
#self.textview.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(1.0, 1.0, 1.0, 0.1))
self.textview.set_name("BEditView")

css = """
#BEditWindow {
background-image: url('/home/liu/.local/share/gedit/plugins/wallpaper_74694_1024.jpg');
}
#BEditView, #BEditTabLabel{
background-color: RGBA(255,255,255,0.4);
}
* {
background-color: RGBA(255,255,255,0);
}
"""
style_provider = Gtk.CssProvider()
style_provider.load_from_data(css)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)

def on_new(self, widget = None):
"""在这里新建一个文档"""
new_textview = BEditDocument()
new_scrolledwindow = Gtk.ScrolledWindow()
new_scrolledwindow.set_name("BEditView")
new_scrolledwindow.set_hexpand(True)
new_scrolledwindow.set_vexpand(True)
new_scrolledwindow.add(new_textview)
new_label = Gtk.Label("无标题文档")
new_label.set_name("BEditTabLabel")
self.notebook.append_page(new_scrolledwindow, new_label)
print new_scrolledwindow

def on_open_file(self, widget):
cur_wid = self.notebook.get_nth_page(self.notebook.get_current_page())
dialog = Gtk.FileChooserDialog("打开文件", self,
Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

self.add_filters(dialog)

response = dialog.run()
if response == Gtk.ResponseType.OK:
# 在这里读取文件
file_object = open(dialog.get_filename())
try:
all_the_text = file_object.read()
cur_wid_tex = cur_wid.get_child()
cur_wid_tex.get_buffer().set_text(all_the_text)
# 将绝对路径分解成路径和文件名
cur_wid_tex.pathname , cur_wid_tex.filename = os.path.split(dialog.get_filename())
self.set_title(cur_wid_tex.filename+" ("+cur_wid_tex.pathname+") - bedit")
# 设置标签文本
tabLabel = Gtk.Label(cur_wid.get_child().filename)
tabLabel.set_name("BEditTabLabel")
self.notebook.set_tab_label(cur_wid, tabLabel)
finally:
file_object.close()
elif response == Gtk.ResponseType.CANCEL:
print "Cancel clicked"

dialog.destroy()

def add_filters(self, dialog):
filter_text = Gtk.FileFilter()
filter_text.set_name("文本文件")
filter_text.add_mime_type("text/plain")
dialog.add_filter(filter_text)

filter_py = Gtk.FileFilter()
filter_py.set_name("Python 文件")
filter_py.add_mime_type("text/x-python")
dialog.add_filter(filter_py)

filter_any = Gtk.FileFilter()
filter_any.set_name("所有文件")
filter_any.add_mime_type("*")
dialog.add_filter(filter_any)

def set_style(self):
"""用来设置外观"""

css = """
#BEditWindow {
background-image: url('/home/liu/.local/share/gedit/plugins/wallpaper_74694_1024.jpg');
}
#BEditView, #BEditTabLabel{
background-color: RGBA(255,255,255,0.5);
}
* {
background-color: RGBA(255,255,255,0);
}
"""
style_provider = Gtk.CssProvider()
style_provider.load_from_data(css)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)

class BEditDocument(GtkSource.View):
"""为 GtkSource.View 添加一些原来没有的东西。"""
def __init__(self):
GtkSource.View.__init__(self)
self.filename = ""
self.filepath = ""

if __name__ == "__main__":
win = TextViewWindow()
win.set_name("BEditWindow")
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()[/python]


_________________
http://noie.name 网站改版中。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
cron
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译