繁体   English   中英

Python - 如何将gtk.DrawingArea缩放为适合gtk.Window的宽度和高度?

[英]Python - how to put gtk.DrawingArea scaled fit with gtk.Window width and height?

我有这个gtk.DrawingArea放在gtk.Window中,但是当它运行时不是100%缩放适合gtk.Widnow高度和宽度。

在此输入图像描述

以下代码未执行适合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)

不要设置静态大小,也不要在main__init__绘制

相反,在expose-event回调中获取大小,并根据widget的当前大小绘制该回调。

像这样的东西(你的代码不完整所以我无法测试)

  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()

请下次,提供一个可运行的示例,必须编写缺失的部分并评论不相关的内容,这很无聊。

这是一个应该有用的例子。 基本上,您提供的代码甚至没有您说的问题。 初始样本的主要问题是您为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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM