Как упоминалось в ответе Андрея, если вы просто вызываете qualificationCheckCallback
как обычный метод, вы получите только возвращаемое значение из одного из методов. По этой причине довольно много делегатов многоадресной передачи, у которых есть возвращаемое значение.
Если ваша цель - проверить, возвращает ли хотя бы один из методов, хранящихся в вашем делегате, false, вам нужно вызвать методы индивидуально. Вот один из способов сделать это с помощью метода Delegate.GetInvocationList () :
bool hasAtLeastOneFalse = false;
if (qualificationCheckCallback != null)
{
foreach(var f in qualificationCheckCallback.GetInvocationList()
.Cast>())
{
if (!f(employee, shift))
{
hasAtLeastOneFalse = true;
// break; // If you don't care about invoking all delegates, you can choose to break here.
}
}
}
Console.WriteLine(hasAtLeastOneFalse);
Я не предполагаю, что это хорошая практика, но это можно сделать.
Позиционирование окон не обрабатывается клиентским приложением. Он обрабатывается диспетчером Window (metacity и т. Д.).
В библиотеке SDL, на которой основан PyGame, есть несколько переменных среды , которые можно использовать, чтобы дать подсказки диспетчеру окна. Это подсказки, которые WM может игнорировать, но это лучшее, что вы можете сделать.
Примером могут служить комментарии к здесь .
import os
os.environ['SDL_VIDEO_WINDOW_POS'] = str(position[0]) + "," + str(position[1])
в соответствии с http://pygame.org/wiki/FrequentlyAskedQuestions
Вы также можете просто центрировать экран с помощью
import pygame, os
os.environ['SDL_VIDEO_CENTERED'] = '1'
Обратите внимание, что это необходимо сделать, прежде чем инициализировать pygame в основном цикле. Я делаю это сразу после импорта os, например. И поскольку они не являются частью pygame, вы, вероятно, можете использовать его в другом месте, хотя такие вещи, как gtk и wxpython, предоставляют свои собственные механизмы.