Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 27, 2017 14:30:48

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

Ainur
Скрипт запускаю в pycharm и spyder, у них свои глюки. И кириллица превращается в ?
у меня такое было когда файл был не в UTF-8 кодировке, пока работаешь все ок, закрыл-открыл вся кирилица превратилась в нечитаемые символы.

Вот вам небольшой пример, не стал заморачиваться с UI, весь инефейс в коде нарисовал. Ну както так.
  # -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtSql import *
class MyWin(QtGui.QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # РИсуем ГУЙ , чтобы не заморачиваться с UI
        self.setWindowTitle('--Main Window--')
        centralWidget = QtGui.QWidget(self)
        self.setCentralWidget(centralWidget)
        gridLayout = QtGui.QGridLayout(centralWidget)
        centralWidget.setLayout(gridLayout)
        self.lineEdits = []
        for i in range(3):
            self.lineEdits.append(QtGui.QLineEdit(self))
            gridLayout.addWidget(self.lineEdits[i], 0, i)
        self.outputWidget = QtGui.QTextEdit(self)
        pushBtn = QtGui.QPushButton(self, text='MyFunct')
        loadBtn = QtGui.QPushButton(self, text='Load data..')
        checkBtn = QtGui.QPushButton(self, text='check data..')
        gridLayout.addWidget(self.outputWidget, 1,0,1,3)
        gridLayout.addWidget(pushBtn, 2, 0)
        gridLayout.addWidget(loadBtn, 2, 1)
        gridLayout.addWidget(checkBtn, 2, 2)
        # ГУЙ нарисован
        pushBtn.clicked.connect(self.MyFunction)
        loadBtn.clicked.connect(self.loadData)
        checkBtn.clicked.connect(self.checkData)
        self.show()
    def MyFunction(self):
        '''
        Метод заглушка, напсать что нужно свое
        '''
        self.outputWidget.setText('Нажата кнопка "MyFunct" \n Текст в поле 1: {} \n Текст в поле 2: {} \n Текст в поле 3: {}'.format(self.lineEdits[0].text(), self.lineEdits[1].text(), self.lineEdits[2].text()))
    def loadData(self):
        '''
        Метод заглушка, напсать что нужно свое
        '''
        self.loadWindow = LoadWindow(self.lineEdits[0].text())
    def checkData(self):
        '''
        Метод заглушка, напсать что нужно свое
        '''
        self.checkWindow = CheckWindow(self.lineEdits[1].text(),self.lineEdits[2].text() )
class LoadWindow(QtGui.QWidget):
    def __init__(self, connParams):
        super().__init__()
        self.setWindowTitle('--Load Data Window--')
        hLayout = QtGui.QHBoxLayout(self)
        self.outputWidget = QtGui.QTextEdit(self)
        hLayout.addWidget(self.outputWidget)
        self.outputWidget.setText('Нажата кнопка "Load data.."  \n Параметры соединения с базой:{}'.format(connParams))
        self.show()
class CheckWindow(QtGui.QWidget):
    def __init__(self, data1, data2):
        super().__init__()
        self.setWindowTitle('--Check Data Window--')
        hLayout = QtGui.QHBoxLayout(self)
        self.outputWidget = QtGui.QTextEdit(self)
        hLayout.addWidget(self.outputWidget)
        self.outputWidget.setText('Нажата кнопка "Check data.."  \n Данные в поле2:{} \n Данные в поле3:{} '.format(data1, data2))
        self.show()
if __name__=="__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyWin()
    myapp.show()
    sys.exit(app.exec_())



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Окт. 27, 2017 14:33:14)

Офлайн

#2 Окт. 27, 2017 14:40:26

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2682
Репутация: +  182  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

> Spyder мне тоже больше нравился, вот только с pyqt он совсем не хочет дружить…

Пользуйся Wing-ом

> Если бы у меня заработало вряд ли я сидела бы на форуме и просила помощи

Погуглила бы. Про то как создавать диалоги много где пишут.

PEHDOM Диалоги нужно наследовать от QDialog, а не он QWidget, все выджеты должны быть атрибутами ну и дизайнером нужно пользоваться, а не в ручную…



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Окт. 27, 2017 14:53:04

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

Rodegast
Диалоги нужно наследовать от QDialog, а не он QWidget, все выджеты должны быть атрибутами ну и дизайнером нужно пользоваться, а не в ручную…
Ну дык я ж для примера, это минимальный код, который человек может скопировать и у себя запустить без танцев с бубном и скачиванием еще трех UI файлов, которые ему нафиг сдались.
А уж дальше человек сам решит от чего ему наследовать другие окна, и какие UI к ним подгружать.. В первом посте у тописктартера они вообще были QMainWindow. ХЗ для чего, может ему так надо для каких-то нам неизвестных целей.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Окт. 27, 2017 16:27:31

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2682
Репутация: +  182  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

> Ну дык я ж для примера

ИХМО как раз примеры и нужно делать максимально корректными. Иначе ТС увидит что диалоги наследуются от QWidget и решит что именно так и надо делать.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Ноя. 9, 2017 11:34:44

Ainur
Зарегистрирован: 2017-10-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

Спасибо,

PEHDOM
> PEHDOM
, сделал виджетами. Все отлично работает

Отредактировано Ainur (Ноя. 9, 2017 12:29:54)

Офлайн

#6 Ноя. 9, 2017 11:57:40

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2682
Репутация: +  182  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

> сделал виджетами. Все отлично работает

Если оно у тебя запустилось, то это не значит что все оконные манагеры будут его корректно обрабатывать



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Ноя. 9, 2017 12:28:49

Ainur
Зарегистрирован: 2017-10-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

Rodegast
> сделал виджетами. Все отлично работаетЕсли оно у тебя запустилось, то это не значит что все оконные манагеры будут его корректно обрабатывать
Я реализовала именно в своем приложении, теперь все работает как надо. а не тупо запустила пример у себя

Офлайн

#8 Ноя. 9, 2017 13:31:23

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2682
Репутация: +  182  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

Что значит в твоём понимании “Как надо”?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Ноя. 10, 2017 05:34:03

Ainur
Зарегистрирован: 2017-10-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

Rodegast
Что значит в твоём понимании “Как надо”?
Приложение запускается. При нажатии на 1 кнопку открывается дополнительное окно, где отображается результат функции, и оно открывается хоть сколько раз, те могу менять входные параметры и проверять сново. так же со всеми аналогичными кнопками, которые выполняют разные функции. Вы я так понимаю заядлый питонист. А я только новичок. Но это сообщество создано для обмена опытом и помощи новичкам, я так понимаю. Можете помочь мне с другим вопросом?
 def MyFunction3(self):
        self.ui.textEdit_2.setText("")
        try:
            connection = pypyodbc.connect('Driver={SQL Server};Server=*;Database=*; uid=*;pwd=*')
            cursor = connection.cursor()
            code2=self.ui.textEdit_4.toPlainText() #ввод параметра с экрана
            date =  ("""
                declare @pmday_ int = datediff(day,'19900101','%s')
                exec dbo.spkz_autoretr_finder @lid_net = 623, @lid_ret = 17, @pmday = @pmday_;""" %code2)
            cursor.execute(date)
            connection.commit()
            self.ui.textEdit_2.setText('Successful')
        except Exception:
            self.ui.textEdit_2.setText('Error. Please, try again')  
ipython выполняю построчно все работает. При выполнении функции, конектится к базе и не завершает выполнение процедуры, в трассере ошибка прирывания клиентом. От чего это может быть? Но при этом в приложении нет ошибки, пишет что выполнено успешно. Есть такое подозрение что хранимая процедура не успевает до конца отработать и соединение закрывается

Офлайн

#10 Ноя. 10, 2017 11:53:22

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2682
Репутация: +  182  -
Профиль   Отправить e-mail  

PYQT оконное приложение на python

> Приложение запускается.

Оно у тебя запускается и работает, но нужно что бы оно запустилось и точно также работало и у других людей.

> Есть такое подозрение что хранимая процедура не успевает до конца отработать и соединение закрывается

Если мне память не изменяет, то в pypyodbc.connect можно передать параметр timeout. Попробуй его поменять.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version