Они разбираются компилятором , а не препроцессором, который запускает перед компилятором.
Вот что говорит MSDN об этом: http://msdn.microsoft.com/en-us/library/aa903548 (VS.71) .aspx
Вот некоторые проблемы с макросом:
blockquote>
- Компилятор не может проверить, что макропараметры совместимы.
- Макрос расширяется без специальной проверки типа.
- Параметры i и j оцениваются дважды. Например, если какой-либо параметр имеет постинкрементную переменную, инкремент выполняется два раза.
- Поскольку макросы расширяются препроцессором, сообщения об ошибках компилятора будут ссылаться на расширенный макрос, а не на определение макроса. Кроме того, макрос будет отображаться в расширенной форме во время отладки.
Если этого недостаточно для вас, я не знаю, что есть.
Чтобы добавить виджеты в Canvas, вы должны использовать метод create_window
, а не grid()
. Затем вы должны обновить холст перед настройкой области прокрутки.
for i in range(30):
btn = tk.Button(buttonFrame, text=str(i+1))
buttonFrame.create_window((100,i*50), window=btn)
root.update()
buttonFrame.config(scrollregion=buttonFrame.bbox("all"))
Если вы попробуете, я подозреваю, что это не то, что вы искали, поскольку метод create_window требует абсолютного позиционирования (вы не можете использовать grid или pack). Вот почему большинство людей помещают рамку в холст и вместо этого добавляют свои виджеты. Многие люди абстрагировали этот поддельный фрейм, который на самом деле является фреймом в холсте в другом фрейме, включая меня .