Gtk игнорирует параметры ширины и высоты виджетов - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь написать калькулятор на GTK, используя сетку, и он игнорирует параметры ширины и высоты кнопок. Ниже приведена краткая версия кода:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class CalculatorWindow(Gtk.Window):

   def __init__(self):
       Gtk.Window.__init__(self, title='Calculator')
       self.set_border_width(10)

       grid = Gtk.Grid()
       self.add(grid)

       button1 = Gtk.Button.new_with_mnemonic('_1')
       button1.connect('clicked', self.on_1_clicked)
       grid.attach(button1, 0, 3, 1, 2)

       button2 = Gtk.Button.new_with_mnemonic('_2')
       button2.connect('clicked', self.on_2_clicked)
       grid.attach_next_to(button2, button1, Gtk.PositionType.RIGHT, 2, 2)

       button3 = Gtk.Button.new_with_mnemonic('_3')
       button3.connect('clicked', self.on_3_clicked)
       grid.attach(button3, 0, 1, 1, 2)

       button4 = Gtk.Button.new_with_mnemonic('_4')
       button4.connect('clicked', self.on_4_clicked)
       grid.attach_next_to(button4, button3, Gtk.PositionType.RIGHT , 1, 2)



   def on_1_clicked(self, button1):
       print(1)

   def on_2_clicked(self, button2):
       print(2)

   def on_3_clicked(self, button3):
       print(3)

   def on_4_clicked(self, button4):
       print(4)


window = CalculatorWindow()
window.connect('destroy', Gtk.main_quit)
window.show_all()
Gtk.main()

Независимо от того, что я ввожу в качестве параметра ширины для кнопок, GTK всегда выполняет только один для каждой строки. Если я изменю ширину button1 и button2, будет настроена только button1. И даже если он подстраивается, он не делает это правильно. Регулировка ширины всегда остается неизменной, независимо от того, введу я 5 или 20.

Я написал нечто похожее прямо из GTK + 3 Tutorial (6.2.1), и это сработало. Я что-то пропустил?

1 Ответ

0 голосов
/ 28 февраля 2020

Вам нужны меньшие виджеты, чтобы установить отношение к тем, которые охватывают несколько столбцов / строк. В противном случае они просто примут наименьший размер.

Может быть, этот пример прояснит:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class CalculatorWindow(Gtk.Window):

   def __init__(self):
       Gtk.Window.__init__(self, title='Calculator')
       self.set_border_width(10)

       grid = Gtk.Grid()
       self.add(grid)

       button1 = Gtk.Button.new_with_mnemonic('_1')
       grid.attach(button1, 0, 0, 1, 1)

       button2 = Gtk.Button.new_with_mnemonic('_2')
       grid.attach(button2, 1, 0, 1, 1)

       button3 = Gtk.Button.new_with_mnemonic('_3')
       grid.attach(button3, 0, 1, 2, 1)

       button4 = Gtk.Button.new_with_mnemonic('_4')
       grid.attach(button4, 2, 0, 1, 2)


window = CalculatorWindow()
window.connect('destroy', Gtk.main_quit)
window.show_all()
Gtk.main()
...