Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Qt4+PyQt Помогите? пожалуйста плиз... 
:(
    Опции темы
Дарвин
Дата 18.10.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



1. Создал форму с бутоном и TextEdit в КТ4 - сохранил в имя.ui
Создал файл имя.pyw. У бутона имя Button1, а у TextEdit имя TextEdit.
Какой должен быть код в имя.pyw чтоб при запуске и нажатие на бутон открывался диалог сохранения в фал содержимого ТесктЕдита?

Вот как я пробывал:
Код

#!/usr/bin/env python
import sys
import readline

from PyQt4 import QtCore, QtGui, uic


app = QtGui.QApplication(sys.argv)
widget = uic.loadUi("CHW.ui")

#а здесь я не знаю что писать???

widget.show()
app.exec_()


2. Писал функцию которая по параметрам должна создавать хтмл файл. Скажите плиз где здесь трабл?  smile 
Код

def CreateHTML(name, autor, text, srs=0):
    try:
        f=filen
        f = file("1.html", "w")
        f.write('<HTML><HEAD><TITLE>'+name+'</title></head><BODY><TABLE border="0" cellspacing="4" cellpadding="4" bgcolor="FFFFFF" id="ltbl"><TR><TD class="ltbl" width="600" valign="top"><H3 align=center>'+name+'</h3><FONT size="3"><pre>&nbsp;'+text+'</pre></font><BR><H5 align="right">'+autor+'&nbsp;&nbsp;&nbsp;</h5></td><TD width="200" valign="top">')
    except:
        pass

Зарание сенкс....
PM MAIL ICQ   Вверх
Дарвин
Дата 19.10.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



Ну дайте хоть линк что почитать я не лениывый  smile 
Но самое главное чтоб по русски
PM MAIL ICQ   Вверх
proDiva
Дата 19.10.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 19.9.2006
Где: КЧР, Россия

Репутация: 7
Всего: 7



PM MAIL ICQ   Вверх
Дарвин
Дата 19.10.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



proDiva, извини но  я так и ен понял
Кто мне даст нармальную доку или объяснит, таму я хоть 10 + дам (правда придёться ждать)
PM MAIL ICQ   Вверх
proDiva
Дата 19.10.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 19.9.2006
Где: КЧР, Россия

Репутация: 7
Всего: 7



Цитата(Дарвин @  19.10.2006,  13:16 Найти цитируемый пост)
proDiva, извини но  я так и ен понял

Честно говоря, я тоже не поняла, поэтому сама использую wxPython. Есть хорошая программка demo-курс, там по каждому контролу сразу выложен код. Я так и учусь - вырезаю оттуда кусок кода и прикладываю к своему приложению.... работает smile Есть даже примеры готовых приложений.

Выбирай нужный вариант с именем demo

PM MAIL ICQ   Вверх
pythonwin
Дата 19.10.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(proDiva @  19.10.2006,  20:48 Найти цитируемый пост)

Честно говоря, я тоже не поняла, поэтому сама использую wxPython. Есть хорошая программка demo-курс, там по каждому контролу сразу выложен код. Я так и учусь - вырезаю оттуда кусок кода и прикладываю к своему приложению.... работает smile Есть даже примеры готовых приложений.

Поддерживаю! smile 
Дарвин, переходи на wxpython. smile
PM WWW GTalk Jabber   Вверх
J2A
Дата 19.10.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



"""
- Как сделать A в X?
- Пользуй Z! Z рулит немерянно!
"""

Теперь по существу и по порядку.

1. Пиши по-русски
2. Пиши понятней, что не получается, что ты делаешь. А то дал кусок функции - мол, разбирайтесь, что тут.
3. Примеры к PyQt есть в поставке (каталог examples).
4.
Код

 
#!/usr/bin/python

import sys

from PyQt4 import QtCore, QtGui

class QDummyWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(QDummyWidget, self).__init__(parent)
        self.make_subwidgets()
        self.connect_signals()

    def make_subwidgets(self):
        self.button = QtGui.QPushButton("Press me for save", self)
        self.textedit = QtGui.QTextEdit("Initial text", self)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.textedit)
        layout.addWidget(self.button)
        self.setLayout(layout)

    def connect_signals(self):
        QtCore.QObject.connect(self.button, QtCore.SIGNAL("clicked()"),
                               self.save_action)

    def save_action(self):
        file_name = QtGui.QFileDialog.getSaveFileName(
            self,
            "Dummy Save as",
            "",
            "html (*.html)"
            )
        if not file_name.isEmpty():
            fh = open(str(file_name), 'w')
            fh.write(self.textedit.toHtml())
            fh.close()

app = QtGui.QApplication(sys.argv)
widget= QDummyWidget()
widget.resize(200, 120)

widget.show()
sys.exit(app.exec_())



--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
Дарвин
Дата 20.10.2006, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



J2A, огромное тебе спасибо, но это действительно в экземплс мог глянуть.
А вот как работать именно с UI файлами? 

Это сообщение отредактировал(а) Дарвин - 20.10.2006, 05:17
PM MAIL ICQ   Вверх
J2A
Дата 20.10.2006, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Ты свой .ui покажи

Работать можно двумя способами:
1) подгружать на лету
2) компилировать pyuic4'ом в ui_*.py и наследоваться от них (подробности см. в pyqt4 ref)

Это сообщение отредактировал(а) J2A - 20.10.2006, 08:20
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
Artemios
Дата 20.10.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(Дарвин @  20.10.2006,  05:05 Найти цитируемый пост)
J2A, огромное тебе спасибо

++J2A smile


Цитата(Дарвин @  20.10.2006,  05:05 Найти цитируемый пост)
А вот как работать именно с UI файлами?


Цитата(J2A @  20.10.2006,  08:18 Найти цитируемый пост)
Работать можно двумя способами:
1) подгружать на лету
2) компилировать pyuic4'ом в ui_*.py и наследоваться от них (подробности см. в pyqt4 ref)

Лично мне 2-й вариант больше нравится.
А еще лучше без *.ui -- вручную писать (для простых, конечно, интерфейсов), кода меньше.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
Дарвин
Дата 20.10.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



J2A,  вот я создал ui_main.py

Код

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'CHW.ui'
#
# Created: Thu Oct 19 02:21:08 2006
#      by: PyQt4 UI code generator 4.0.1
#
# WARNING! All changes made in this file will be lost!

import sys
from PyQt4 import QtCore, QtGui

class Ui_QtForm(object):
    def setupUi(self, QtForm):
        QtForm.setObjectName("QtForm")
        QtForm.resize(QtCore.QSize(QtCore.QRect(0,0,707,703).size()).expandedTo(QtForm.minimumSizeHint()))
        QtForm.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)

        self.centralwidget = QtGui.QWidget(QtForm)
        self.centralwidget.setObjectName("centralwidget")

        self.label2 = QtGui.QLabel(self.centralwidget)
        self.label2.setGeometry(QtCore.QRect(10,60,46,16))
        self.label2.setObjectName("label2")

        self.label1 = QtGui.QLabel(self.centralwidget)
        self.label1.setGeometry(QtCore.QRect(10,20,90,21))
        self.label1.setObjectName("label1")

        self.label4 = QtGui.QLabel(self.centralwidget)
        self.label4.setGeometry(QtCore.QRect(250,60,61,16))
        self.label4.setObjectName("label4")

        self.label3 = QtGui.QLabel(self.centralwidget)
        self.label3.setGeometry(QtCore.QRect(10,90,46,14))
        self.label3.setObjectName("label3")

        self.Memo = QtGui.QTextEdit(self.centralwidget)
        self.Memo.setGeometry(QtCore.QRect(10,110,681,521))
        self.Memo.setObjectName("Memo")

        self.Edit1 = QtGui.QLineEdit(self.centralwidget)
        self.Edit1.setGeometry(QtCore.QRect(110,20,581,20))
        self.Edit1.setObjectName("Edit1")

        self.Edit2 = QtGui.QLineEdit(self.centralwidget)
        self.Edit2.setGeometry(QtCore.QRect(60,60,171,21))
        self.Edit2.setObjectName("Edit2")

        self.Edit3 = QtGui.QLineEdit(self.centralwidget)
        self.Edit3.setGeometry(QtCore.QRect(310,60,381,20))
        self.Edit3.setObjectName("Edit3")

        self.btnSave = QtGui.QPushButton(self.centralwidget)
        self.btnSave.setGeometry(QtCore.QRect(530,650,75,23))
        self.btnSave.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape(13)))
        self.btnSave.setAutoDefault(True)
        self.btnSave.setObjectName("btnSave")

        self.btnExit = QtGui.QPushButton(self.centralwidget)
        self.btnExit.setGeometry(QtCore.QRect(620,650,75,23))
        self.btnExit.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape(13)))
        self.btnExit.setObjectName("btnExit")
        QtForm.setCentralWidget(self.centralwidget)

        self.statusbar = QtGui.QStatusBar(QtForm)
        self.statusbar.setObjectName("statusbar")
        QtForm.setStatusBar(self.statusbar)

        self.retranslateUi(QtForm)
        QtCore.QObject.connect(self.btnExit,QtCore.SIGNAL("clicked()"),QtForm.close)
        QtCore.QMetaObject.connectSlotsByName(QtForm)
        QtForm.setTabOrder(self.Edit1,self.Edit2)
        QtForm.setTabOrder(self.Edit2,self.Edit3)
        QtForm.setTabOrder(self.Edit3,self.Memo)
        QtForm.setTabOrder(self.Memo,self.btnSave)
        QtForm.setTabOrder(self.btnSave,self.btnExit)

    def retranslateUi(self, QtForm):
        QtForm.setWindowTitle(QtGui.QApplication.translate("QtForm", "Create HTML World", None, QtGui.QApplication.UnicodeUTF8))
        QtForm.setWhatsThis(QtGui.QApplication.translate("QtForm", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
        "p, li { white-space: pre-wrap; }\n"
        "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
        self.label2.setText(QtGui.QApplication.translate("QtForm", "Автор:", None, QtGui.QApplication.UnicodeUTF8))
        self.label1.setText(QtGui.QApplication.translate("QtForm", "Название статьи:", None, QtGui.QApplication.UnicodeUTF8))
        self.label4.setText(QtGui.QApplication.translate("QtForm", "Р˜СЃС‚РѕС‡РЅРёРє:", None, QtGui.QApplication.UnicodeUTF8))
        self.label3.setText(QtGui.QApplication.translate("QtForm", "Статья:", None, QtGui.QApplication.UnicodeUTF8))
        self.Memo.setHtml(QtGui.QApplication.translate("QtForm", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
        "p, li { white-space: pre-wrap; }\n"
        "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
        self.Edit3.setText(QtGui.QApplication.translate("QtForm", "http://", None, QtGui.QApplication.UnicodeUTF8))
        self.btnSave.setText(QtGui.QApplication.translate("QtForm", "Сохранить", None, QtGui.QApplication.UnicodeUTF8))
        self.btnExit.setText(QtGui.QApplication.translate("QtForm", "Выход", None, QtGui.QApplication.UnicodeUTF8))


Извините что большой такой. Напишите плиз как обрашаться к бутон и при нажатии открывался диалог сохранения в хтмл файл. А содержимое хтмла брало из объекта мемо.
По гроб жизни должен буду  smile 

PM MAIL ICQ   Вверх
J2A
Дата 20.10.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Один из вариантов (с наследованием):
Код

#!/usr/bin/env python
# Qui - sample for PyQt and compiled .ui usage
import sys
from PyQt4 import QtCore, QtGui
from ui_main import Ui_QtForm

class MainWindow(QtGui.QMainWindow, Ui_QtForm):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.connectSignals()

    def connectSignals(self):
        QtCore.QObject.connect(
            self.btnSave,
            QtCore.SIGNAL("clicked()"),
            self.actionSave)

    def actionSave(self):
        fileName = QtGui.QFileDialog.getSaveFileName(
            self,
            "Qui Save",
            "",
            "html (*.html)"
            )
        if not fileName.isEmpty():
            fh = open(str(fileName), 'w')
            fh.write(self.Memo.toHtml())
            fh.close()

def main(args):
    app = QtGui.QApplication(args)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main(sys.argv)


Второй вариант - вместо множественного наследования задавать атрибут ui и с ним "играться". Подробности см. в PyQt4 reference guide.

P.S. Твой авто-генеренный класс у меня заработал, только с русским текстом ты чего-то не того сделал

Это сообщение отредактировал(а) J2A - 20.10.2006, 20:09
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
Дарвин
Дата 20.10.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



J2A, скопировал, запустил нажимаю на кнопку вылазиет диалог указываю имя, но нифига не сохраняет... smile 
Что же делать
PM MAIL ICQ   Вверх
J2A
Дата 21.10.2006, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Запусти с консоли, какие-нибудь ошибки вылазят?
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
Дарвин
Дата 21.10.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



J2A, вот пишет.

Код

Traceback (most recent call last):
  File "main.pyw", line 27, in actionSave
    fh = open(str(fileName), 'w')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 33-39: ord
inal not in range(128)

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.