Как я понимаю, вы используете Ui_mainWindow
, сгенерированный из файла .ui
. Как вы видите Ui_mainWindow
, это просто класс python, который содержит виджеты. getOpenFileName
возвращает экземпляр QWidget
в качестве первого параметра. Поэтому вам нужно подклассы QWidget
или QMainWindow
и определить методы в этом классе.
Код будет выглядеть так:
import sys
from PyQt4 import QtCore, QtGui
from file_with_ui import Ui_MainWindow
class Main(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
def browse(self):
filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.')
fname = open(filename)
data = fname.read()
self.textEdit.setText(data)
fname.close()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())
В качестве альтернативы вы можете сохранить ui
как Атрибут экземпляра:
class Main(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui=Ui_MainWindow()
self.ui.setupUi(self)
И вводит ваши элементы управления через self.ui
, например: self.ui.textEdit.setText(data)
. Рассмотрим учебное пособие по pyuic
использованию PyQt по примеру (сеанс 1)
проверьте это
http://www.netikka.net/tsneti/info/tscmd052.htm
@echo off & setlocal enableextensions
:: Build a Visual Basic Script
set vbs_=%temp%\tmp$$$.vbs
set skip=
findstr "'%skip%VBS" "%~f0" > "%vbs_%"
::
:: Prompting without linefeed as in Item #15
echo.|set /p="Password: "
:: Run the script with Microsoft Windows Script Host Version 5.6
for /f "tokens=* delims=" %%a in ('cscript //nologo "%vbs_%"') do set MyPass1=%%a
::
::echo.
echo.|set /p="Retype : "
for /f "tokens=* delims=" %%a in ('cscript //nologo "%vbs_%"') do set MyPass2=%%a
::
:: Clean up
for %%f in ("%vbs_%") do if exist %%f del %%f
::
:: Demonstrate the result
echo.
if "%MyPass1%"=="%MyPass2%" (
echo The entered password was %MyPass1%
) else (
echo No match)
endlocal & goto :EOF
'
'The Visual Basic Script
Set WshPass = WScript.CreateObject("ScriptPW.Password") 'VBS
Password=WshPass.GetPassWord() 'VBS
WScript.Echo PassWord 'VBS
Если можно установить Cygwin, Вы получите оболочку удара по умолчанию, таким образом, эта команда будет работать:
считайте-s-p "Пароль": ПАРОЛЬ
Только проблемой является теперь значение ПАРОЛЯ, только установлен в оболочке удара, не как переменная среды пакетный файл видит (не используйте PWD в качестве этого, означает что-то еще в cygwin). Таким образом, необходимо было бы переписать сценарий как сценарий оболочки удара (возможно, не слишком трудно, учитывая ограничения командной строки!).
Или Вы могли передать пароль в сценарий пакетной обработки от cygwin, но это означает выполнять новый экземпляр командной строки:
cmd $PASSWORD /cyourbatchfile.bat
Все немного замысловатые и нисколько удовлетворяющий ;)
Разумным использованием другого инструмента, в свободном доступе в Windows, следующие два сценария делают задание, которое Вы хотите.
Во-первых, GetPwd.cmd:
@echo off
:: GetPwd.cmd - Get password with no echo.
<nul: set /p passwd=Password:
for /f "delims=" %%i in ('cscript /nologo GetPwd.vbs') do set passwd=%%i
echo.
:: This bit's just to prove we have the password.
echo %passwd%
Затем GetPwd.vbs:
' GetPwd.vbs - Get password with no echo then echo it. '
Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword
Объяснение:
GetPwd.vbs просто использует объект пароля ввести пароль от пользователя и затем распечатать его к стандартному выводу (следующий абзац объяснит, почему это не обнаруживается в терминале).
GetPwd.cmd немного более хитер (но командные сценарии обычно).
"<nul: set /p passwd=Password: "
управляйте просто производит подсказку без запаздывания CR/LF - это - подлый способ эмулировать удар "echo -n"
. Это устанавливает passwd
к пустой строке как побочный эффект и не ожидает входа, так как он берет свой вход от nul: устройство.
"for /f "delims=" %%i in ('cscript /nologo GetPwd.vbs') do set passwd=%%i"
оператор является самым хитрым битом. Это выполняет vbscript без рекламы Microsoft (/nologo
), так, чтобы единственный вывод строки был паролем (от vbscript "Wscript.StdOut.WriteLine strPassword"
.
Установка разделителей ни к чему требуется, чтобы получать входные строки с пробелами, иначе Вы просто получаете первое слово. "for ... do set ..."
наборы passwd
быть фактическим выводом пароля от vbscript.
Затем мы отзываемся эхом, пустая строка (на самом деле завершаются "Password: "
строка), и повторяют пароль, таким образом, можно проверить, что это работает:
C:\Pax> GetPwd
Password:
this is my password
C:\Pax>
scriptpw.dll доступен с XP и 2K3, но не обязательно более поздние версии.
Инструкции для Vista и по-видимому Win7 ниже, дают им попытку:
Для маскирования пароля сценарий использует в своих интересах COM-объект ScriptPW. ScriptPW загружается по умолчанию на Windows XP и Windows 2003. При выполнении Windows 2000 или Windows Vista необходимо будет скопировать
scriptpw.dll
файл отWindows\System32
папка системы XP или системы Windows 2003 кWinnt\System32
илиWindows\System32
папка на Ваших Windows 2000 или системе Vista. После того как DLL был скопирован, необходимо будет зарегистрировать его путем выполнения команды:
regsvr32 scriptpw.dll
Для успешной регистрации DLL на машине Vista необходимо будет открыть командную строку как администратор. Чтобы сделать это, нажмите Start | Все Программы | Аксессуары. Затем щелкните правой кнопкой по ярлыку Командной строки и выбору, “Выполненному как администратор”. Однажды в командной строке как администратор, Вы сможете успешно работать
regsvr32 scriptpw.dll
управляйте для регистрации DLL.
Я предполагаю, что Вы не хотите эха пароля на экране.
Если всплывающее окно хорошо для Вас, Вы могли бы использовать, например, VBScript для показа окна IE, отображающего поле пароля. Вот пример.
Как альтернатива Вы могли назвать свой сценарий от HTA (Приложение HTML) файлом (см. Введение в Приложения HTML (HTAs).
С уважением, divo
Мы действительно наполняем как это все время, но помещаем пароль в командную строку и передаем его переменной в пакетном файле.
Другой альтернативой являются мои инструменты командной строки EditV32 (x86) или EditV64 (x64). Например:
editv32 -m -p "Password: " PWD
-m
означает «маскированный ввод», а -p
- это приглашение. Ввод пользователя сохраняется в переменной среды PWD. Вы можете получить его здесь: