当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 菜单快捷键怎么搞?pygtk
帖子发表于 : 2008-09-09 7:46 
头像

注册: 2008-09-05 11:37
帖子: 306
送出感谢: 0 次
接收感谢: 0 次
[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]


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-09-09 11:11 
头像

注册: 2006-04-12 18:54
帖子: 4671
送出感谢: 0 次
接收感谢: 7
楼主居然不用glade 自己布局……


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

应该是这个

快捷键不是menu特有的 属性

是menu继承的widget的属性

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

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

当然,更推荐用glade 布局。

用python就是为了开发的高效,不是吗?


_________________
荃创想


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-09-09 21:29 
头像

注册: 2008-09-05 11:37
帖子: 306
送出感谢: 0 次
接收感谢: 0 次
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的好。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-09-12 13:00 
头像

注册: 2006-04-12 18:54
帖子: 4671
送出感谢: 0 次
接收感谢: 7
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呢?


_________________
荃创想


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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