如何获取pygtk窗口的大小?
我在尝试使用gtk.window.get_size()这个方法,但它总是返回默认的宽度和高度。文档上说
get_size()这个方法会返回一个包含当前窗口宽度和高度的元组。如果窗口不在屏幕上,它会返回PyGTK建议给窗口管理器的初始窗口大小。通过get_size()方法得到的大小是最后一次在配置事件中收到的大小,也就是说,PyGTK使用的是它自己存储的大小,而不是去询问X服务器的大小。因此,如果你调用resize()方法后立刻调用get_size()方法,大小还没有生效。在窗口管理器处理完调整大小的请求后,PyGTK会通过配置事件收到窗口大小变化的通知,然后窗口的大小就会更新。
我尝试手动调整窗口大小并等了一分钟,但仍然得到默认的宽度和高度。
我想用这个方法在退出时保存窗口大小,以便下次启动时能恢复。有没有更好的方法来做到这一点?
这是我在主退出时用的代码片段。
def on_main_window_destroy(self, widget, data=None):
if self.view.current_view.layout == 'list':
self.view.current_view.set_column_order()
width = self.main_window.get_size()[0]
height = self.main_window.get_size()[1]
#test statement
print (width, height)
self.prefs.set_size_prefs(width, height)
self.prefs.set_view_prefs(self.view.current_view.media, self.view.current_view.layout)
gtk.main_quit()
我想我现在明白发生了什么。这段代码是在销毁信号内,所以当代码被调用时,窗口已经消失了。有没有更标准的方法来处理窗口的调整大小?我希望能避免每次用户调整窗口大小时都处理调整大小的事件。
2 个回答
0
试着在调用 window.get_size()
之前运行:
while gtk.events_pending():
gtk.main_iteration_do(False)
6
这段话似乎解决了你的问题:
import gtk
def print_size(widget, data=None):
print window.get_size()
def delete_event(widget, data=None):
print window.get_size()
return False
def destroy(widget, data=None):
gtk.main_quit()
window = gtk.Window()
window.connect('delete_event', delete_event)
window.connect('destroy', destroy)
button = gtk.Button(label='Print size')
button.connect('clicked', print_size)
window.add(button)
window.show_all()
gtk.main()
我觉得关键在于在delete_event
信号上调用get_size
,而不是在destroy
信号上。如果你在destroy
信号上调用,就像你说的那样,它只会返回默认的大小。