python - PyGTK - 如何使用此表格布局来匹配背景图像?

标签 python python-2.7 gtk pygtk gnome

这就是我正在尝试的,但有些行的设计不同。为什么我无法正确放置按钮,知道如何修复它吗?

这是背景图片:

enter image description here

代码如下:

enter image description here

#!/usr/bin/python
import gtk

class PyApp(gtk.Window):

    def createButton(self, name, funreturn):
      button_height= 32
      button = gtk.Button()
      button.props.relief = gtk.RELIEF_NONE
      label = gtk.Label()
      label.set_markup('<span color="#ffffff"><small>' + name + '</small></span>')
      button.add(label)
      button.set_name("deButton")
      button.connect("clicked" , funreturn , None)
      button.set_size_request(48, button_height)
      return button

    def callback(self):
      print "none"

    def __init__(self):
        super(PyApp, self).__init__()

        """ Window """
        button_rc = """
        pixmap_path "/var/tmp"

        ### Background > Image
        style "window" {
          bg_pixmap[NORMAL] = "menu/keyboard_new.png"

        }

        style "deButton" {

          fg[PRELIGHT] = { 0, 1.0, 1.0 }
          bg[PRELIGHT] = { 0, 0, 1.0 }
          bg[ACTIVE] = { 1.0, 0, 0 }
          fg[ACTIVE] = { 0, 1.0, 0 }
          bg[NORMAL] = { 1.0, 1.0, 0 }
          fg[NORMAL] = { .99, 0, .99 }
          bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
          fg[INSENSITIVE] = { 1.0, 0, 1.0 }

          engine "pixmap" {
              image {
                  function = BOX
                  file     = "menu/commonbutton1.png"
                  stretch  = TRUE
              }
          }
          bg_pixmap[NORMAL] = "menu/commonbutton1.png"
        }

        # imports
        widget "*.deButton" style "deButton"

        widget_class "*GtkButton*" style "button"
        widget_class "GtkWindow" style "window"
        """

        self.set_title("Keyboard")
        self.set_size_request(600, 300)
        self.set_position(gtk.WIN_POS_CENTER)
        gtk.rc_parse_string(button_rc)
        vbox = gtk.VBox(False, 2)
        table = gtk.Table(5, 10, True)

        table.attach(self.createButton("1",self.callback), 0, 1, 0, 1)
        table.attach(self.createButton("2",self.callback), 1, 2, 0, 1)
        table.attach(self.createButton("3",self.callback), 2, 3, 0, 1)
        table.attach(self.createButton("4",self.callback), 3, 4, 0, 1)
        table.attach(self.createButton("5",self.callback), 4, 5, 0, 1)
        table.attach(self.createButton("6",self.callback), 5, 6, 0, 1)
        table.attach(self.createButton("7",self.callback), 6, 7, 0, 1)
        table.attach(self.createButton("8",self.callback), 7, 8, 0, 1)
        table.attach(self.createButton("9",self.callback), 8, 9, 0, 1)
        table.attach(self.createButton("0",self.callback), 9, 10, 0, 1)


        table.attach(self.createButton("Q",self.callback), 0, 1, 1,2)
        table.attach(self.createButton("W",self.callback), 1, 2, 1, 2)
        table.attach(self.createButton("E",self.callback), 2, 3, 1, 2)
        table.attach(self.createButton("R",self.callback), 3, 4, 1, 2)
        table.attach(self.createButton("T",self.callback), 4, 5, 1, 2)
        table.attach(self.createButton("Y",self.callback), 5, 6, 1, 2)
        table.attach(self.createButton("U",self.callback), 6, 7, 1, 2)
        table.attach(self.createButton("I",self.callback), 7, 8, 1, 2)
        table.attach(self.createButton("O",self.callback), 8, 9, 1, 2)
        table.attach(self.createButton("P",self.callback), 9, 10, 1, 2)

        table.attach(self.createButton("A",self.callback), 0, 1, 2,3)
        table.attach(self.createButton("S",self.callback), 1, 2, 2, 3)
        table.attach(self.createButton("D",self.callback), 2, 3, 2, 3)
        table.attach(self.createButton("F",self.callback), 3, 4, 2, 3)
        table.attach(self.createButton("G",self.callback), 4, 5, 2, 3)
        table.attach(self.createButton("H",self.callback), 5, 6, 2, 3)
        table.attach(self.createButton("J",self.callback), 6, 7, 2, 3)
        table.attach(self.createButton("K",self.callback), 7, 8, 2, 3)
        table.attach(self.createButton("L",self.callback), 8, 9, 2, 3)
        table.attach(self.createButton("",self.callback), 9, 10, 2, 3)

        #vbox.pack_start(gtk.Entry(), False, False, 0)
        vbox.pack_end(table, True, True, 0)

        self.add(vbox)

        self.connect("destroy", gtk.main_quit)
        self.show_all()


PyApp()
gtk.main()

最佳答案

好的 - 可以,最好使用固定小部件而不是表格或网格。

enter image description here

#!/usr/bin/python
import gtk

class PyApp(gtk.Window):

    def __init__(self):
        super(PyApp, self).__init__()

        """ Window - Background embed """
        button_rc = """
        pixmap_path "/var/tmp"
        # Button - image apply
        style "window" {
          bg_pixmap[NORMAL] = "menu/keyboard_new.png"
        }

        style "deButton" {
          fg[PRELIGHT] = { 0, 1.0, 1.0 }
          bg[PRELIGHT] = { 0, 0, 1.0 }
          bg[ACTIVE] = { 1.0, 0, 0 }
          fg[ACTIVE] = { 0, 1.0, 0 }
          bg[NORMAL] = { 1.0, 1.0, 0 }
          fg[NORMAL] = { .99, 0, .99 }
          bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
          fg[INSENSITIVE] = { 1.0, 0, 1.0 }
          engine "pixmap" {
              image {
                  function = BOX
                  file     = "menu/commonbutton1.png"
                  stretch  = TRUE
              }
          }
          bg_pixmap[NORMAL] = "menu/commonbutton1.png"
        }
        # imports
        widget "*.deButton" style "deButton"
        widget_class "*GtkButton*" style "button"
        widget_class "GtkWindow" style "window"
        """

        self.set_title("Keyboard")
        self.set_size_request(600, 300)
        self.set_position(gtk.WIN_POS_CENTER)
        gtk.rc_parse_string(button_rc)  ##<<<<< include the design
        vbox = gtk.VBox(False, 2)

        fix  = gtk.Fixed() ## YumYumYum
        """ Row 1 """
        fix.put( gtk.Button("1") , 20 , 20 )
        fix.put( gtk.Button("2") , 80 , 20 )
        fix.put( gtk.Button("3") , 150 , 20 )
        """ Row 2 """
        fix.put( gtk.Button("Q") , 20 , 80 )
        """ Row 3 """
        fix.put( gtk.Button("A") , 60 , 130 )
        """ Row 4 """
        fix.put( gtk.Button("Z") , 60 , 190 )
        """ Row 5 """
        fix.put( gtk.Button("SPACE") , 180 , 240 )

        vbox.pack_end(fix, True, True, 0)
        self.add(vbox)
        self.connect("destroy", gtk.main_quit)
        self.show_all()


PyApp()
gtk.main()

关于python - PyGTK - 如何使用此表格布局来匹配背景图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19403842/

相关文章:

animation - GtkDrawingArea/cairo 视觉故障

c - 为什么要使用 GLib 函数?

c++ - 在 GTKmm 中启动外部编辑器

python - 使用 Jenkins 中的管道执行 pytest

python错误: TypeError: an integer is required

python - 记录 TimedRotatingFileHandler 无法正常工作

python - 如何模拟在测试中使用别名导入的 python 函数

python - 使用另一个dict python在嵌套Json中插入元素

python - 我想使用 pyqt5 的拖放方法获取并显示图像

python - DjangoProject没有出现在我的Docker-Image中(用于Windows Home的Docker工具箱)