我将这个gtk.DrawingArea置于gtk.Window中,但是当它运行时,它的宽度和宽度不是100%缩放。
以下代码未执行适合gtk.Window的100%宽度/高度比例。知道如何获得预期的结果吗?
def main(self, screenSaverPicture):
self.w = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.w.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(0, 0, 0))
self.w.set_size_request(1024, 768)
self.w.set_border_width(0)
self.w.set_decorated(False)
self.w.set_title("Screen Saver Screen Locked")
self.w.move(0,0)
#self.w.resize(66,66)
self.w.set_name("main window")
# screenSaverPicture = pictures png or jpeg files shown on the screen
self.drawing = gtk.DrawingArea
self.drawing.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color('#000000'))
self.drawing.connect ('button-press-event',self.callback)
self.drawing.set_events(gtk.gdk.EXPOSURE_MASK | gtk.gdk.LEAVE_NOTIFY_MASK | gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.POINTER_MOTION_MASK| gtk.gdk.POINTER_MOTION_HINT_MASK )
self.w.add(self.drawing)
self.w.show_all()
self.w.connect("destroy", gtk.main_quit)
gtk.main()
编辑:尝试但也一样
self.vbox = gtk.VBox()
self.vbox.pack_start(self.drawing, expand=True)
#or self.vbox.pack_start(self.drawing, expand=False)
self.w.add(self.vbox)
或
self.vbox = gtk.Fixed()
self.vbox.put(self.drawing, 0,0)
self.drawing.size_request()
self.drawing.size_allocate(gtk.gdk.Rectangle(0,0,1024,768))
self.w.add(self.vbox)
答案 0 :(得分:2)
不要设置静态大小,也不要在main
或__init__
相反,在expose-event
回调中获取大小,并根据小部件的当前大小绘制该回调。
这样的事情(你的代码不完整,所以我无法测试)
def main(self, screenSaverPicture):
self.w = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.w.set_border_width(0)
self.w.set_decorated(False)
self.w.set_title("Screen Saver Screen Locked")
self.w.move(0,0)
#self.w.resize(66,66)
self.w.set_name("main window")
# screenSaverPicture = pictures png or jpeg files shown on the screen
self.drawing = gtk.DrawingArea(...) ## FIXME
self.drawing.connect('expose-event', self.onExposeEvent)
self.drawing.connect ('button-press-event', self.callback)
self.drawing.set_events(gtk.gdk.EXPOSURE_MASK | gtk.gdk.LEAVE_NOTIFY_MASK | gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.POINTER_MOTION_MASK| gtk.gdk.POINTER_MOTION_HINT_MASK )
self.w.add(self.drawing)
self.w.show_all()
self.w.connect("destroy", gtk.main_quit)
gtk.main()
def onExposeEvent(self, widget, event):
x, y, w, h = widget.allocation
cr = widget.get_window().cairo_create()
cr.rectangle(0, 0, w, h)
cr.set_source_rgb(0, 0, 0)
cr.fill()
答案 1 :(得分:2)
请下次提供一个可运行的例子,必须编写缺失的部分并评论不相关的部分,这很无聊。
这是一个应该有效的例子。基本上,您提供的代码甚至没有您说的问题。您的初始样本的主要问题是您为GtkDrawingArea
设置了黑色背景,而不是蓝色背景。
import gtk
class Test:
def main(self):
self.w = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.w.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(0, 0, 0))
self.drawing = gtk.DrawingArea()
self.drawing.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color('#0000ff'))
self.w.add(self.drawing)
self.w.show_all()
self.w.connect("destroy", gtk.main_quit)
gtk.main()
if __name__ == '__main__':
a = Test()
a.main()