GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 2506|回复: 2

[已解决]无法在 Ubuntu 12.10 中显示出菜单(关于菜单的部分...

[复制链接]
万方 该用户已被删除
发表于 2013-2-19 09:42:49 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
  • TA的每日心情
    慵懒
    2013-7-6 15:08
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]初来乍到

    发表于 2013-2-19 20:55:16 | 显示全部楼层
    你根本沒有把 mb 添加到 window 上,要加上去你要把這兩個對象都放到 box 裏面
    1. #!/usr/bin/python
    2. #coding:utf8

    3. from gi.repository import Gtk, Pango, GtkSource, Gdk, GObject
    4. import os

    5. class SearchDialog(Gtk.Dialog):
    6.         """这里是一个在文本中搜索字符串的对话框。"""
    7.         def __init__(self, parent):
    8.                 Gtk.Dialog.__init__(self, "Search", parent,
    9.                         Gtk.DialogFlags.MODAL, buttons=(
    10.                                 Gtk.STOCK_FIND, Gtk.ResponseType.OK,
    11.                                 Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL
    12.                         )
    13.                 )
    14.                
    15.                 box = self.get_content_area()
    16.                
    17.                 box.add(Gtk.Label("查找:"))
    18.                
    19.                 self.entry = Gtk.Entry()
    20.                 box.add(self.entry)
    21.                
    22.                 self.show_all()
    23.                
    24.                
    25. class TextViewWindow(Gtk.Window):
    26.         """程序的主要部分"""
    27.         
    28.         history = []
    29.         box = Gtk.Box(1, 0)
    30.         
    31.         def __init__(self):
    32.                 Gtk.Window.__init__(self, title="带背景的文本编辑器")
    33.                 self.add(self.box)
    34.                 GObject.signal_new("changed", BEditDocument, GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, ())        
    35.                
    36.                 self.set_default_size(560, 350)
    37.                 self.create_notebook()
    38.                 self.create_menubar()
    39.                 self.create_toolbar()
    40.                
    41.                 self.on_new()
    42.                 #self.set_style()
    43.                 #载入历史记录
    44.                 #self.load_config()
    45.                

    46.         def create_toolbar(self):
    47.                 """建立工具栏,这里的工具栏,实际上是选项卡上的一些标签页。"""
    48.                
    49.                 button = [Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW),
    50.                                 Gtk.MenuToolButton.new_from_stock(Gtk.STOCK_OPEN),
    51.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_SAVE),
    52.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_PRINT),
    53.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO),
    54.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_REDO),
    55.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_CUT),
    56.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_COPY),
    57.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_PASTE),
    58.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_FIND),
    59.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_FIND_AND_REPLACE),
    60.                                 Gtk.ToolButton.new_from_stock(Gtk.STOCK_PREFERENCES)]
    61.                                 
    62.                 for i in button:
    63.                         self.notebook.append_page(Gtk.Box(spacing=6), i)
    64.                                 
    65.                 button[0].connect("clicked", self.on_new)
    66.                 button[1].connect("clicked", self.on_open_file)
    67.                 button[2].connect("clicked", self.on_save)
    68.                 button[9].connect("clicked", self.on_find)
    69.                 button[-1].connect("clicked", self.on_preferences)
    70.                
    71.         def create_menubar(self):
    72.                 """建立一个菜单栏"""
    73.                 mb = Gtk.MenuBar()
    74.                
    75.                 #文件菜单
    76.                 filemenu = Gtk.Menu()
    77.                
    78.                 new = Gtk.MenuItem.new_with_label("新建")
    79.                 filemenu.append(new)
    80.                
    81.                 openitem = Gtk.MenuItem.new_with_label("打开")
    82.                 filemenu.append(openitem)
    83.                
    84.                 sep = Gtk.SeparatorMenuItem()
    85.                 filemenu.append(sep)
    86.                
    87.                 save = Gtk.MenuItem.new_with_label("保存")
    88.                 filemenu.append(save)
    89.                
    90.                 filem = Gtk.MenuItem.new_with_label("文件")
    91.                 filem.set_submenu(filemenu)
    92.                
    93.                 mb.set_vexpand(False)
    94.                 mb.append(filem)
    95.                
    96.                 #查看菜单
    97.                 viewmenu = Gtk.Menu()
    98.                
    99.                 wrap = Gtk.MenuItem.new_with_label("自动换行")
    100.                 viewmenu.append(wrap)
    101.                
    102.                 viewm = Gtk.MenuItem.new_with_label("查看")
    103.                 viewm.set_submenu(viewmenu)
    104.                
    105.                 mb.set_vexpand(False)
    106.                 mb.append(viewm)
    107.                 self.box.add(mb)
    108.                
    109.                                                 
    110.         def create_notebook(self):
    111.                 """建立选项卡"""
    112.                 self.notebook = Gtk.Notebook()
    113.                 self.box.add(self.notebook)
    114.                     
    115.         def on_new(self, widget = None):
    116.                 """在这里新建一个文档"""
    117.                 new_textview = BEditDocument()
    118.                 new_textview.connect("changed", self.on_update_title)        
    119.                 new_scrolledwindow = Gtk.ScrolledWindow()
    120.                 new_scrolledwindow.set_hexpand(True)
    121.                 new_scrolledwindow.set_vexpand(True)
    122.                 new_scrolledwindow.add(new_textview)                        
    123.                
    124.                 new_label = Gtk.Label("无标题文档")
    125.                 self.notebook.append_page(new_scrolledwindow, new_label)
    126.                 #切换到刚插入的一页
    127.                 self.show_all()
    128.                 self.notebook.set_current_page(self.notebook.get_n_pages()-1)
    129.                     
    130.         def on_open_file(self, widget):
    131.                 dialog = Gtk.FileChooserDialog("打开文件", self,
    132.                         Gtk.FileChooserAction.OPEN,
    133.                         (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
    134.                          Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
    135.                         
    136.                 self.add_filters(dialog)
    137.                                 
    138.                 response = dialog.run()
    139.                 if response == Gtk.ResponseType.OK:
    140.                         # 判断最后一个标签里面是否是空文档
    141.                         last_doc = self.notebook.get_nth_page(-1).get_child()
    142.                         if last_doc.filename != "无标题文档" or last_doc.change_number > 0 or last_doc.stext != "":
    143.                                 self.on_new()
    144.                                 last_doc = self.notebook.get_nth_page(-1).get_child()
    145.                         last_doc.open(dialog.get_filename())
    146.                         self.history.append(dialog.get_filename())
    147.                         print self.wrap_mode
    148.                         self.save_config()
    149.                         
    150.                 dialog.destroy()
    151.                
    152.         def on_save(self, widget = None):
    153.                 cur_wid = self.notebook.get_nth_page(self.notebook.get_current_page()).get_child()
    154.                 # 判断文件是否有文件名
    155.                 if cur_wid.filepath == "":
    156.                         dialog = Gtk.FileChooserDialog("另存为", self,
    157.                                 Gtk.FileChooserAction.SAVE,
    158.                                 (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
    159.                                  Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
    160.                         
    161.                         self.add_filters(dialog)
    162.                                 
    163.                         response = dialog.run()
    164.                         if response == Gtk.ResponseType.OK:
    165.                                 cur_wid.save(dialog.get_filename())
    166.                                 self.history.append(dialog.get_filename())
    167.                                 self.save_config()
    168.                         dialog.destroy()
    169.                 else:
    170.                         # 直接使用已经存在的文件名
    171.                         filename = cur_wid.save()
    172.                         self.history.append(filename)
    173.                         self.save_config()
    174.                         
    175.                
    176.         def on_find(self, widget = None):
    177.                 dialog = SearchDialog(self)
    178.                 response = dialog.run()
    179.                 if response == Gtk.ResponseType.OK:
    180.                         cursor_textbuffer = self.notebook.get_nth_page(self.notebook.get_current_page()).get_child().get_buffer()
    181.                         cursor_mark = cursor_textbuffer.get_insert()
    182.                         start = cursor_textbuffer.get_iter_at_mark(cursor_mark)
    183.                         if start.get_offset() == self.textbuffer.get_char_count():
    184.                                 start = self.textbuffer.get_start_iter()
    185.                                 
    186.                         self.search_and_mark(dialog.entry.get_text(), start)
    187.                         
    188.                 dialog.destroy()
    189.                
    190.         def on_preferences(self, widget = None):
    191.                 print """显示属性对话框"""
    192.                
    193.         def on_update_title(self, widget = None):
    194.                 """更新标题栏"""
    195.                 cw = self.notebook.get_nth_page(self.notebook.get_current_page())
    196.                 cwt = cw.get_child()
    197.                 if cwt.change_number == 0:
    198.                         self.set_title(cwt.filename+" ("+cwt.filepath+") - bedit")
    199.                         new_label = Gtk.Label(cwt.filename)
    200.                         self.notebook.set_tab_label(cw, new_label)
    201.                 else:
    202.                         self.set_title("*" + cwt.filename+" ("+cwt.filepath+") - bedit")
    203.                         new_label = Gtk.Label("*" + cwt.filename)
    204.                         self.notebook.set_tab_label(cw, new_label)
    205.                 new_label.set_name("BEditTabLabel")
    206.                                 
    207.         def add_filters(self, dialog):
    208.                 filter_text = Gtk.FileFilter()
    209.                 filter_text.set_name("文本文件")
    210.                 filter_text.add_mime_type("text/plain")
    211.                 dialog.add_filter(filter_text)
    212.                
    213.                 filter_py = Gtk.FileFilter()
    214.                 filter_py.set_name("Python 文件")
    215.                 filter_py.add_mime_type("text/x-python")
    216.                 dialog.add_filter(filter_py)
    217.                
    218.                 filter_any = Gtk.FileFilter()
    219.                 filter_any.set_name("所有文件")
    220.                 filter_any.add_mime_type("*")
    221.                 dialog.add_filter(filter_any)
    222.                
    223.         def set_style(self):
    224.                 """用来设置外观"""
    225.                
    226.                 css = """
    227.                 GtkWindow {
    228.                         background-image: url('/home/liu/.local/share/gedit/plugins/wallpaper_74694_1024.jpg');
    229.                 }
    230.                 GtkNotebook {
    231.                         background-color: RGBA(224,224,224,0.5);
    232.                 }
    233.                 GtkScrolledWindow , GtkSourceView {
    234.                         background-color: RGBA(224,0,0,0);
    235.                 }
    236.                 GtkSourceView:selected { background-color: #C80; }
    237.                 """
    238.                 style_provider = Gtk.CssProvider()
    239.                 style_provider.load_from_data(css)
    240.                 Gtk.StyleContext.add_provider_for_screen(
    241.                         Gdk.Screen.get_default(),
    242.                         style_provider,
    243.                         Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
    244.                 )
    245.                         
    246.         def load_config(self):
    247.                 file_object = open(os.environ['HOME']+"/.local/share/bedit/config")
    248.                 try:
    249.                         for eachline in file_object:
    250.                                 els = eachline.split()
    251.                                 if els[0] == "wrap_mode":
    252.                                         if els[1] == "NONE":
    253.                                                 self.wrap_mode = Gtk.WrapMode.NONE
    254.                                         if els[1] == "CHAR":
    255.                                                 self.wrap_mode = Gtk.WrapMode.CHAR
    256.                                         if els[1] == "WORD":
    257.                                                 self.wrap_mode = Gtk.WrapMode.WORD
    258.                                         if els[1] == "WORD_CHAR":
    259.                                                 self.wrap_mode = Gtk.WrapMode.WORD_CHAR
    260.                                 else:
    261.                                         self.history.append(els[0])
    262.                                         print self.history
    263.                 finally:
    264.                         file_object.close()
    265.                         
    266.         def save_config(self):
    267.                 file_object = open(os.environ['HOME']+"/.local/share/bedit/config","w")
    268.                 try:
    269.                         if self.wrap_mode == Gtk.WrapMode.NONE:
    270.                                 file_object.write("wrap_mode NONE\n")
    271.                         elif self.wrap_mode == Gtk.WrapMode.CHAR:
    272.                                 file_object.write("wrap_mode CHAR\n")
    273.                         elif self.wrap_mode == Gtk.WrapMode.WORD:
    274.                                 file_object.write("wrap_mode WORD\n")
    275.                         elif self.wrap_mode == Gtk.WrapMode.WORD_CHAR:
    276.                                 file_object.write("wrap_mode WORD_CHAR\n")

    277.                         for eachline in self.history:
    278.                                 file_object.write(eachline+'\n')
    279.                 finally:
    280.                         file_object.close()                        
    281.                
    282. class BEditDocument(GtkSource.View):
    283.         """为 GtkSource.View 添加一些原来没有的东西。"""
    284.         def __init__(self):
    285.                 GtkSource.View.__init__(self)
    286.                 self.filename = "无标题文档"
    287.                 self.filepath = ""
    288.                 self.stext = ""
    289.                 self.change_number = 0
    290.                         
    291.                 #修改后的信号
    292.                 self.get_buffer().connect("changed", self.text_change)
    293.                 #self.load_config()
    294.                
    295.                
    296.         def text_change(self, buffer):
    297.                 text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), False)
    298.                 if self.stext == text:
    299.                         if self.change_number > 0:
    300.                                 self.change_number = 0
    301.                                 #发出改变标题栏的信号
    302.                                 self.emit('changed')
    303.                 #如果被修改了
    304.                 else:
    305.                         self.change_number = self.change_number+1
    306.                         if self.change_number == 1:
    307.                                 self.emit('changed')
    308.                                 
    309.         def open(self, filename):
    310.                 # 在这里读取文件
    311.                 file_object = open(filename)
    312.                 try:
    313.                         self.stext = file_object.read()
    314.                         self.get_buffer().set_text(self.stext)
    315.                         # 将绝对路径分解成路径和文件名
    316.                         self.filepath , self.filename =  os.path.split(filename)
    317.                         self.emit('changed')
    318.                 finally:
    319.                         file_object.close()
    320.                         
    321.         def save(self, filename = ""):
    322.                 """在这里保存文件"""
    323.                 if filename == "":
    324.                         file_object = open(self.filepath + "/" + self.filename, 'w')
    325.                 else:
    326.                         file_object = open(filename, 'w')
    327.                         self.filepath , self.filename =  os.path.split(filename)
    328.                 try:
    329.                         self.stext = self.get_buffer().get_text(self.get_buffer().get_start_iter(), self.get_buffer().get_end_iter(), False)
    330.                         file_object.write(self.stext)
    331.                         # 将绝对路径分解成路径和文件名
    332.                         self.change_number = 0
    333.                         self.emit('changed')
    334.                 finally:
    335.                         file_object.close()
    336.                         
    337.                 return self.filepath + "/" + self.filename
    338.                         
    339.         def load_config(self):
    340.                 """读取配置文件"""
    341.                 file_object = open(os.environ['HOME']+"/.local/share/bedit/config")
    342.                 try:
    343.                         for eachline in file_object:
    344.                                 els = eachline.split()
    345.                                 if els[0] == "wrap_mode":
    346.                                         if els[1] == "NONE":
    347.                                                 self.set_wrap_mode(Gtk.WrapMode.NONE)
    348.                                         if els[1] == "CHAR":
    349.                                                 self.set_wrap_mode(Gtk.WrapMode.CHAR)
    350.                                         if els[1] == "WORD":
    351.                                                 self.set_wrap_mode(Gtk.WrapMode.WORD)
    352.                                         if els[1] == "WORD_CHAR":
    353.                                                 self.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
    354.                 finally:
    355.                         file_object.close()
    356.                
    357.    
    358. if __name__ == "__main__":
    359.         win = TextViewWindow()
    360.         win.connect("delete-event", Gtk.main_quit)
    361.         #win.show_all()
    362.         Gtk.main()
    复制代码
    註釋掉了你的一些代碼,然後加上了菜單,不過菜單位置不太對,懶得改了直接給你吧
    万方 该用户已被删除
     楼主| 发表于 2013-2-20 12:34:22 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-12-4 01:23 , Processed in 0.028830 second(s), 10 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表