Найдите все узлы, которые имеют атрибут, который соответствует определенному значению scala

Разверните этот ответ.

Tkinter

Tkinter является инструментарием, который идет с Python. Это означает, что у Вас уже есть все, что необходимо записать GUI. То, что это также означает, - то, что, если Вы принимаете решение распределить свою программу, скорее всего, все остальные уже имеют то, что они должны запустить Вашу программу.

Tkinter является сформировавшимся и стабильным, и является (по крайней мере возможно) довольно простым в использовании. Я нашел легче использовать, чем wxPython, но очевидно это несколько субъективно.

Tkinter получает плохой рэп для взгляда ужасного и устаревшего. В то время как это верно, что легко создать ужасные графический интерфейсы пользователя с Tkinter, также довольно легко создать симпатичные графический интерфейсы пользователя. Tkinter не содержит Вашу руку, но он не очень мешает, также. Tkinter смотрит лучше всего на Mac и Windows, так как он использует собственные виджеты там, но это смотрит хорошо на Linux, также.

другая точка о виде Tkinter - то, что по большей части взгляд не так важен, как люди разбирают его, чтобы быть. Большинство приложений, записанных с инструментариями, такими как Tkinter, wxPython, PyQT, и т.д. является приложениями специального назначения. Для типов приложений эти инструментарии используются для, взгляды козырей удобства использования. Если вид приложения важен, достаточно легко полировать приложение Tkinter.

Tkinter имеет некоторые функции, что другие инструментарии не близко подходят к соответствию. Трассировки переменных, названные шрифтами, геометрия (расположение), менеджеры и способ, которым Tkinter обрабатывает события, являются все еще стандартом, к которому должны быть оценены другие инструментарии.

На оборотной стороне, Tkinter является оберткой вокруг интерпретатора Tcl, который запускает внутренний Python. Это главным образом невидимо для любого разрабатывающего с Tkinter, но он иногда приводит к сообщениям об ошибках, которые выставляют эту архитектуру. Вы получите ошибку при жалобе на виджет с именем как ".1245485.67345", который не будет иметь почти смысла никому, если Вы не будете также знакомы с тем, как Tcl/tk работает.

Другая оборотная сторона - то, что Tkinter не имеет стольких же предварительно созданных виджетов сколько wxPython. Иерархический древовидный виджет в Tkinter немного слаб, например, и нет никакого встроенного виджета таблицы. С другой стороны, холст Tkinter и текстовые виджеты чрезвычайно мощны и просты в использовании. Для большинства типов приложений Вы запишете, однако, у Вас будет все, в чем Вы нуждаетесь. Просто не ожидайте копировать Microsoft Word или Photoshop с Tkinter.

я не знаю то, что лицензия для Tkinter, я принимаю то же что касается Python в целом. Tcl/tk имеет лицензию BSD-стиля.

PyQt

Это - сборка сверху Qt, платформа C++. Это вполне совершенствуется и имеет некоторые хорошие инструменты как спокойный Разработчик для разработки приложений. Необходимо знать, хотя, что не похоже на Python 100%, но близко к нему. документация превосходна

, Эта платформа действительно хороша. Это активно разрабатывается Trolltech, который принадлежит Nokia. Привязка для Python разрабатывается Берегом реки.

PyQt доступен в соответствии с лицензией GPL или коммерческой. Цена лицензии берега реки PyQt составляет приблизительно 400 евро на разработчика.

кварта не является только платформой GUI, но и имеет много других классов также, можно создать приложение, просто используя спокойные классы. (Как SQL, сети, сценарии, †¦)

кварта раньше эмулировала элементы GUI на каждой платформе, но теперь использует собственные стили платформ (хотя не собственные инструментарии GUI): см. документация для Mac OS X и стиль Windows XP

, Упаковка так же проста как работающий py2exe или pyInstaller. Содержание моего приложения PyQt похоже на это на окнах (я использовал InnoSetup сверху его для надлежащей установки):

pyticroque.exe           PyQt4.QtGui.pyd           unicodedata.pyd
MSVCP71.dll              PyQt4._qt.pyd             unins000.dat
MSVCR71.dll              python25.dll              unins000.exe
PyQt4.QtCore.pyd         sip.pyd                   _socket.pyd

кварта идет с разработчиком виджета и даже в последних версиях с IDE, чтобы помочь разработать программное обеспечение Qt.

PySide

PySide является LGPL, связывающим с QT. Это разрабатывается Nokia как замена для GPL PyQt.

, Хотя на основе другой технологии, чем существующая GPL-лицензированная привязка PyQt, PySide будет первоначально стремиться быть совместимым с API с ними. В дополнение к PyQt-совместимому API больше API Pythonic будет обеспечено в будущем.

wxPython

wxPython является привязкой для Python с помощью wxWidgets - Платформа. Эта платформа находится под лицензией LGPL и разрабатывается сообществом разработчиков ПО с открытым исходным кодом.

то, Что я действительно пропускаю, является хорошим инструментом для разработки интерфейса, у них есть приблизительно 3, но ни один из них не применим.

Одна вещь, которую я должен упомянуть, состоит в том, что я нашел ошибку в представлении вкладки несмотря на то, что я не использовал ничего усовершенствованного. (Только на Mac OS X) я думаю , wxWidgets столь не полируется как Qt.

wxPython действительно только о классах GUI, очень еще нет.

wxWidgets использует собственные элементы GUI.

преимущество wxPython имеет по Tkinter, то, что wxPython имеет намного более крупную библиотеку виджетов, от которых можно выбрать из.

Другие

у меня нет опыта с другими платформами GUI, возможно, кто-то еще имеет.

11
задан Deduplicator 10 February 2015 в 22:36
поделиться

3 ответа

Во-первых, XML - это литералы в Scala, поэтому:

val xml = <div><span class="test">hello</span><div class="test"><p>hello</p></div></div>

Теперь, что касается проблемы:

def attributeValueEquals(value: String)(node: Node) = {
     node.attributes.exists(_.value.text == value)
}

Фактически, я бы использовал « существует » вместо « filter » и « defined » также для исходной задачи.

Наконец, я лично предпочитаю синтаксис операторного стиля, особенно когда у вас есть готовая функция, вместо анонимный, чтобы перейти к « filter »:

val testResults = xml \\ "_" filter attributeValueEquals("test")

Исходный стиль оператора смешивает для « \\ » и стиль точки для « filter », что в итоге довольно уродливо.

18
ответ дан 3 December 2019 в 04:33
поделиться

I'm quite new to Scala, I propose you this solution, but I'm not sure this is the best one:

def attributeValueEquals(value: String)(node: Node) = {
  node.attributes.foldLeft(false)((a : Boolean, x : MetaData) => a | (x.value == value))
}

val testResults = (xml \\ "_").filter(attributeValueEquals("test")) 
println("testResults: " + testResults )

// prints: testResults: ArrayBuffer(<span class="test">hello</span>, 
// <div id="test"><p>hello</p></div>, 
// <random any="test"></random>)
0
ответ дан 3 December 2019 в 04:33
поделиться
def nodeHasValue(node:Node,value:String) = node.attributes.value != null && node.attributes.value.contains(value)

(x \\ "_").filter( nodeHasValue(_,"test"))
0
ответ дан 3 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: