菜单快捷键怎么搞?pygtk

Python/PHP/Perl 开发与设计
回复
头像
evolution
帖子: 306
注册时间: 2008-09-05 11:37
送出感谢: 0
接收感谢: 0

菜单快捷键怎么搞?pygtk

#1

帖子 evolution » 2008-09-09 7:46

[code#/usr/bin/python
# coding=utf8

import pygtk
pygtk.require('2.0')

import gtk

from article import *

#编辑器
class main_editor:
def __init__(self):
self.my=gtk.TextView()
self.my.set_editable(1)
self.buf=self.my.get_buffer()
#self.buf.set_text("我")
self.my.show()
self.a=Article()

def dump(self):
b,e =self.buf.get_bounds()
self.a.setTex(self.buf.get_text(b,e))


#主窗口
class main_wnd:
def __init__(self):
self.window=gtk.Window(gtk.WINDOW_TOPLEVEL)

self.ace=gtk.AccelGroup()
self.window.add_accel_group(self.ace)

self.window.connect("destroy",self.destroy)
self.window.connect("key_press_event",self.on_key_press)

self.vbox=gtk.VBox()
self.menu_bar()
self.edt= main_editor()
self.vbox.pack_start(self.edt.my)

self.vbox.show()
self.window.add(self.vbox)
self.window.show()
self.window.resize(480,480)



self.b=Book()


def destroy(self,widget,data=None):
gtk.main_quit()


def on_key_press(self,widget,event,data=None):
if event.keyval == gtk.keysyms.Escape :
self.destroy(self.window)
return 0

def menu_bar(self):
self.menu_bar = gtk.MenuBar()
self.vbox.pack_start(self.menu_bar,0)
#self.window.add(self.menu_bar)
self.menu_bar.show()

self.file_item=gtk.MenuItem("File")
self.file_item.show()
self.file_menu()
self.file_item.set_submenu(self.file_menu)

self.book_item=gtk.MenuItem("Book")
self.book_item.show()
self.book_menu()
self.book_item.set_submenu(self.book_menu)

self.menu_bar.append(self.file_item)
self.menu_bar.append(self.book_item)

self.acem=self.menu_bar.get_accel_group()


self.file_item.add_accelerator("activate",self.acem,ord('f'),gtk.gdk.CONTROL_MASK,gtk.ACCEL_VISIBLE)

def menuitem_response(self,data):
return

def menuitem_save(self,data):
self.edt.dump()
self.b.append(self.edt.a)
f=ioer("c:/a.html")
self.b.save(f)


def on_add_a(self,data):
return


def book_menu(self):
self.book_menu=gtk.Menu()

new_item=gtk.MenuItem("new")

self.book_menu.append(new_item)

new_item.connect_object("activate",self.on_add_a,"book.new")

new_item.show()





def file_menu(self):
self.file_menu = gtk.Menu() # Don't need to show menus

# Create the menu items
open_item = gtk.MenuItem("Open")
save_item = gtk.MenuItem("Save")
quit_item = gtk.MenuItem("Quit")

# Add them to the menu
self.file_menu.append(open_item)
self.file_menu.append(save_item)
self.file_menu.append(quit_item)

# Attach the callback functions to the activate signal
open_item.connect_object("activate", self.menuitem_response, "file.open")
save_item.connect_object("activate", self.menuitem_save, "file.save")

# We can attach the Quit menu item to our exit function
quit_item.connect_object ("activate", self.destroy, "file.quit")

# We do need to show menu items
open_item.show()
save_item.show()
quit_item.show()





main_w=main_wnd()


gtk.main()


if __name__ == "__main__":
print 'eqal'

[/code]
头像
jarlyyn
论坛版主
帖子: 4671
注册时间: 2006-04-12 18:54
送出感谢: 0
接收感谢: 6 次
联系:

#2

帖子 jarlyyn » 2008-09-09 11:11

楼主居然不用glade 自己布局……


http://www.pygtk.org/docs/pygtk/class-g ... ccelerator

应该是这个

快捷键不是menu特有的 属性

是menu继承的widget的属性

(pygtk的widget可以理解为接受信号和用来处理位置的基本空间,其他的空间都是在上面draw的)

推荐多翻翻 pygtk的Reference,很不错的

当然,更推荐用glade 布局。

用python就是为了开发的高效,不是吗?
头像
evolution
帖子: 306
注册时间: 2008-09-05 11:37
送出感谢: 0
接收感谢: 0

#3

帖子 evolution » 2008-09-09 21:29

jarlyyn 写了:楼主居然不用glade 自己布局……


http://www.pygtk.org/docs/pygtk/class-g ... ccelerator

应该是这个

快捷键不是menu特有的 属性

是menu继承的widget的属性

(pygtk的widget可以理解为接受信号和用来处理位置的基本空间,其他的空间都是在上面draw的)

推荐多翻翻 pygtk的Reference,很不错的

当然,更推荐用glade 布局。

用python就是为了开发的高效,不是吗?
谢谢大侠!我找到了解决方法。就是只要在 快捷的键的名字之前+ 下划线就好了。。


我不用GLADE布局,是因为我用手布局更快。更能处理特殊情况。因为用编辑器切换起来麻烦。而且编辑器一般处理的是静态的布局。我一般要考虑动态的布局。我用TK的时候就是用代码来布局。这样更灵活。


就像LATEX一样,他完全是用代码来布局的,是不是也一样比WORD那种GUI的好。
头像
jarlyyn
论坛版主
帖子: 4671
注册时间: 2006-04-12 18:54
送出感谢: 0
接收感谢: 6 次
联系:

#4

帖子 jarlyyn » 2008-09-12 13:00

evolution 写了:
jarlyyn 写了:楼主居然不用glade 自己布局……


http://www.pygtk.org/docs/pygtk/class-g ... ccelerator

应该是这个

快捷键不是menu特有的 属性

是menu继承的widget的属性

(pygtk的widget可以理解为接受信号和用来处理位置的基本空间,其他的空间都是在上面draw的)

推荐多翻翻 pygtk的Reference,很不错的

当然,更推荐用glade 布局。

用python就是为了开发的高效,不是吗?
谢谢大侠!我找到了解决方法。就是只要在 快捷的键的名字之前+ 下划线就好了。。


我不用GLADE布局,是因为我用手布局更快。更能处理特殊情况。因为用编辑器切换起来麻烦。而且编辑器一般处理的是静态的布局。我一般要考虑动态的布局。我用TK的时候就是用代码来布局。这样更灵活。


就像LATEX一样,他完全是用代码来布局的,是不是也一样比WORD那种GUI的好。
你那个不是全局快捷健,不能实现ctrl+s 保存的功能。

对于界面的实现来说,直接布局不需要转换,而代码布局需要在脑子里进行图形->代码转换。

最重要的是,如果你做复杂布局,比如我那个pyvideoconv的编辑界面,需要大量的hbox/vbox进行定位,会使得代码的可读性与可维护性变得极差。举个例子。如果我给你我的pyvideoconv的代码,希望你能接手维护。你希望我给你可以直接可视化的glade文件,还是那一串长长的代码让你自己在大脑里重构界面。


为什么我们选择的是python,而不是效率更高的c呢?
回复

回到 “Python/Php/Perl”