2013-07-17 5 views
1

Помещение: Я пытаюсь сделать кучу кнопок в Tkinter и поместить их в макет сетки один за другим. Я не хочу жестко кодировать каждое значение сетки таким образом, что я могу добавить несколько кнопок позже с легкостью.Python post increment variable в вызове функции

Моя первая мысль была:

Button(root, text = "example", command = self.example_action).grid(row = count++) 

Но это не сработало, я сделал некоторые поиски и обнаружили, что питон не до или после приращения оператора (Behaviour of increment and decrement operators in Python). Поэтому моя следующая мысль была:

Button(root, text = "example", command = self.example_action).grid(row = count = count + 1) 

Это дает: SyntaxError: недопустимый синтаксис

Так, кроме расщепления свой код на две строки (используйте переменную затем обновить его на следующей строке) есть хороший способ сделать это все на одной строке, чтобы сделать мой код более красивым?

Спасибо, Джошуа

+1

Я бы не стал рассматривать e код линии, чтобы быть более красивым во многих случаях, особенно ваш случай. Мое личное мнение заключается в том, что лучшая читаемость приводит к более «красивому» коду (возможно, к соглашениям PEP-8) – woozyking

+0

Python хочет, чтобы вы сделали это в двух строках –

ответ

1

Я полагаю, вы могли бы использовать генератор. Инициализировать счетчик как:

count = itertools.count() 

, то вы можете сделать следующее столько, сколько вам нравится

Python 2.x:

Button(root, text = "example", command = self.example_action).grid(row = count.next()) 

Python 3.x:

Button(root, text = "example", command = self.example_action).grid(row = next(count)) 

Но я, вероятно, не буду

+0

Спасибо, это то, что я искал. Но, как вы и другие комментаторы указали, делать что-то подобное и все это на одной линии, возможно, не стоит того. – jnedrud

0

Я полагаю, граф является целым числом. Поскольку он неизменен, вы не сможете изменить его ценность. Другими словами, что бы вы ни делали для «строки» внутри функции, после возвращения функции значение «строка» не изменится.

>>> row = 2 
>>> def plus(i): 
...  i = i + 1 
... 
>>> plus(row) 
>>> row 
2 
>>> 

Поэтому я предлагаю вам сохранить «строку» в качестве переменной экземпляра, так что вы можете изменить его значение, делая «self.row + = 1»

+0

Я считаю, что строка является именованным аргументом функции grid(). Я пытаюсь увеличить счетчик, который является переменной, а затем передать по значению результат приращения функции – jnedrud

+0

извините, я предполагаю, что я имел в виду «count» вместо «row». Если вы хотите изменить «count», вам нужно будет сохранить его как self.count –