Минимальный размер дочерних виджетов не влияет на минимальный размер родительского виджета, а использование макета также не влияет на минимальный размер виджета. Макеты устанавливают минимальные размеры и размер размера, используя в качестве информации минимальный размер обрабатываемых виджетов, а также другие функции, такие как политика размера и размера. Таким образом, в первом случае вы должны установить минимальный размер родительского виджета равным его минимальному размеру.
С другой стороны, макет имеет интервал по умолчанию, поэтому рекомендуется установить его на 0.
class Line(QWidget):
def __init__(self, parent=None):
super().__init__(parent=parent, autoFillBackground=True)
# Set palette
palette1 = QPalette()
palette1.setColor(QPalette.Window, Qt.red)
palette2 = QPalette()
palette2.setColor(QPalette.Window, Qt.blue)
palettebg = QPalette()
palettebg.setColor(QPalette.Window, Qt.green)
self.setPalette(palettebg)
# Set labels
self.label1 = QLabel(text="A", autoFillBackground=True)
self.label1.setStyleSheet('font-size: 36pt;')
self.label1.setPalette(palette1)
self.label1.setMinimumSize(36, 36)
self.label1.adjustSize()
self.label2 = QLabel(text="B", autoFillBackground=True)
self.label2.setStyleSheet('font-size: 36pt;')
self.label2.setPalette(palette2)
self.label2.setMinimumSize(36, 36)
self.label2.adjustSize()
# Set layout
layout = QHBoxLayout(self, spacing=0)
layout.addWidget(self.label1)
layout.addSpacing(10)
layout.addWidget(self.label2)
self.setMinimumSize(self.minimumSizeHint())
# or
# layout = QHBoxLayout(self, spacing=10)
# layout.addWidget(self.label1)
# layout.addWidget(self.label2)
# self.setMinimumSize(self.minimumSizeHint())
Максимальный размер макета, который может быть обработан, равен размеру родительский виджет, поэтому в его случае он будет сжимать, не учитывая пробелы, решение состоит в том, чтобы установить виджет, являющийся содержимым, и в этом установить макет, чтобы макет свободно распространялся на виджет содержимого.
class Line(QWidget):
def __init__(self, parent=None):
super().__init__(parent=parent, autoFillBackground=True)
# Set palette
palette1 = QPalette()
palette1.setColor(QPalette.Window, Qt.red)
palette2 = QPalette()
palette2.setColor(QPalette.Window, Qt.blue)
palettebg = QPalette()
palettebg.setColor(QPalette.Window, Qt.green)
self.setPalette(palettebg)
# Set labels
self.label1 = QLabel(text="A", autoFillBackground=True)
self.label1.setStyleSheet('font-size: 36pt;')
self.label1.setPalette(palette1)
self.label1.setMinimumSize(36, 36)
self.label1.adjustSize()
self.label2 = QLabel(text="B", autoFillBackground=True)
self.label2.setStyleSheet('font-size: 36pt;')
self.label2.setPalette(palette2)
self.label2.setMinimumSize(36, 36)
self.label2.adjustSize()
content_widget = QWidget(self)
layout = QHBoxLayout(content_widget, spacing=10)
layout.addWidget(self.label1)
layout.addWidget(self.label2)
content_widget.setFixedSize(content_widget.minimumSizeHint())
Да, есть путаница, потому что F # за годы трансформировался с OCaml на .Net. По сути, соглашения об именах представляют собой «критическое изменение» - старый код несовместим с новым кодом.
Однако CTP от мая 2009 г. разрешил проблему.
В примечаниях к выпуску говорится ...
Соглашения об именах стандартных библиотек
Соглашения об именах, принятые для библиотеки F #, следующие:
Весь код .NET и F # OO использует PascalCase в соответствии с существующими рекомендациями .NET.
Операторы функционального программирования F #, такие как List.map предназначен для использования во внутреннем коде реализации F #. В этом коде для имен операторов используется camelCase
Подчеркивания использовать не следует.
Итак, ваш вопрос ...
Class.MyFunctionName or Module.my_function_name
Ответ:
Class.MyFunctionName и Module.MyFunctionName ( см. Правку ниже! )
(применяя правило 1 выше).
По-прежнему существует некоторая путаница при сравнении с операторами программирования F # (например, List.averageBy), но производственный код F # должен использовать CamelCase и, таким образом, выглядеть как любой другой код .Net. В случае сомнений проверьте пример кода для CTP.
- Правка. 2 ноября 2019 г. -
Текущие рекомендации рекомендуют camelCase для функций на уровне модуля, поэтому он
Module.myFunctionName
, который затем делает производственный код совместимым с библиотеками F # (например. List.averageBy)
проверьте пример кода для CTP.- Изменить. 2 ноября 2019 г. -
Текущие рекомендации рекомендуют camelCase для функций на уровне модуля, поэтому он
Module.myFunctionName
, который затем делает производственный код совместимым с библиотеками F # (например. List.averageBy)
проверьте пример кода для CTP.- Изменить. 2 ноября 2019 г. -
Текущие рекомендации рекомендуют camelCase для функций на уровне модуля, поэтому он
Module.myFunctionName
, который затем делает производственный код совместимым с библиотеками F # (например. List.averageBy)
Что-либо официальное: Я думаю "не совсем все же", но каждый раз, когда VS, 2010 достигает Beta1, Вы будете, вероятно, видеть библиотеку F# в ее почти-конечной-форме, и будет много переименований относительно CTP. F#, вероятно, всегда будет немного большим количеством шизофреника, чем его кузены.NET старшего возраста, учитывая его историю.
Из того, что я видел с hubfs.com и других источников, это - соединение от .NET и OCaml.
я надеюсь, что они переключаются на любого и не имеют две различных конвенции и быть Microsoft, я уверен, что они пойдут с точечным сетевым стилем.
Мое понимание и текущее использование - то, что функции модуля / статические функции имеют нижний регистр, и функции 'экземпляра' имеют верхний регистр.
Редактирование не ответ на этот вопрос, но связанный: конвенции Форматирования F# Don Syme
Не уверенный существует любое действительное решение. Кажется, что, возможно, код OCaml-выхода мог бы сохранить часть своего именования, т.е. строчные методы модуля, тогда как участники OO пойдут стиль.NET.