Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4 Создание GUI на основе вход txt файла [RSS Feed]

#1 Апрель 15, 2012 12:45:56

INTJOGE
Зарегистрирован: 2012-04-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

Привет!

Возникла проблема в курсовой, идей никаких

Есть входящий txt файл
Вида:
- - k
- k -
k - -

на основе него нужно построить допустим “-” это button, а “k” это TextEdit это впрочем не так важно что будет, нужна сама идея как это реализовать, а если и с примерчиком

Отредактировано INTJOGE (Апрель 15, 2012 12:46:23)

Офлайн

#2 Апрель 15, 2012 14:19:09

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

Где конкретно проблемы возникают?
Для создания виджетов можно сделать словарь с записями вида: код_виджета -> фабрика_виджета.
Для динамического добавления виджетов - использовать QGridLayout.

Вот простой пример:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
 
widget_factory_by_type = {
    '-': QtGui.QPushButton,
    'k': QtGui.QLineEdit,
}
 
def create_widget(widget_type):
    return widget_factory_by_type[widget_type]()
 
class CustomWidget(QtGui.QWidget):
 
    def load_widgets_from_string(self, data):
        table = [line.split() for line in data.splitlines() if line]
        layout = QtGui.QGridLayout()
        for i, row in enumerate(table):
            for j, widget_type in enumerate(row):
                widget = create_widget(widget_type)
                layout.addWidget(widget, i, j)
        self.setLayout(layout)
 
if __name__ == "__main__":
    test_string = """
- - k
- k -
k - -
"""
    app = QtGui.QApplication(sys.argv)
    window = CustomWidget()
    window.resize(640, 480)
    window.load_widgets_from_string(test_string)
    window.show()
    sys.exit(app.exec_())

Отредактировано reclosedev (Апрель 15, 2012 14:19:56)

Офлайн

#3 Апрель 15, 2012 15:39:02

INTJOGE
Зарегистрирован: 2012-04-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

reclosedev
Где конкретно проблемы возникают?
Да проблема возникла именно в этом, как вытащить инфу из файла, и на основе нее построить то что я хочу.
В файле может быть что-то типо этого:
Pyton–
y——
t——-
o——
n——
За пример спасибо то что НУЖНО!

Извиняюсь может за глупый вопрос т.к совсем не давно начал разбираться в PyQt да и с самим питоном)
Я не понял как именно прочесть из файла в вашем примере)

Офлайн

#4 Апрель 15, 2012 15:50:43

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

Про чтение из файла можно почитать в официальном учебнике Methods of File Objects.

Обработка файла будет зависть от придуманного вами формата. Для кода из моего примера можно заменить test_string = … на

with open('data.txt') as f:
    test_string = f.read()

Отредактировано reclosedev (Апрель 15, 2012 15:52:22)

Офлайн

#5 Апрель 15, 2012 15:58:21

INTJOGE
Зарегистрирован: 2012-04-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

Спасибо за пример и подробное пояснение! + вам)

Офлайн

#6 Апрель 16, 2012 12:13:45

INTJOGE
Зарегистрирован: 2012-04-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

У меня еще возникло пару вопросов
http://s56.radikal.ru/i151/1204/36/01169b5d8a5d.jpg


1) У меня что-то не выходит закрасить элемент item1 черным цветом
2) Второй вопрос про кнопки, как можно сделать так чтоб между ними не было отступа

Отредактировано INTJOGE (Апрель 16, 2012 12:25:08)

Офлайн

#7 Апрель 16, 2012 17:54:15

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

INTJOGE
1) У меня что-то не выходит закрасить элемент item1 черным цветом
А cell.Cell() - это что, наследник QGraphicsRectItem? Тогда можно попробовать item1.setBrush(QBrush(Qt.black)).

INTJOGE
2) Второй вопрос про кнопки, как можно сделать так чтоб между ними не было отступа
layout.setSpacing(0), но маленький отступ все равно будет.

Отредактировано reclosedev (Апрель 16, 2012 17:54:40)

Офлайн

#8 Апрель 16, 2012 19:09:59

INTJOGE
Зарегистрирован: 2012-04-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

reclosedev
А cell.Cell() - это что, наследник QGraphicsRectItem? Тогда можно попробовать item1.setBrush(QBrush(Qt.black)).
Да это наследник QGraphicsRectItem, так я пробовал но что-то было не то
Щас помогло а именно item1.setBrush(QtCore.Qt.black)


reclosedev
layout.setSpacing(0), но маленький отступ все равно будет.
Это тоже пробовал но думал что до упора можно придвинуть кнопки.

Спасибо, за помощь)

Офлайн

#9 Апрель 17, 2012 14:50:21

INTJOGE
Зарегистрирован: 2012-04-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

И опять я тут Сразу извиняюсь за надоедливость
Я так понял ругается он на QtGui.QGroupBox(“Prewiew”) но что-то догнать в чем именно дело не могу.
Ошибка: http://s50.radikal.ru/i127/1204/35/f3ad6aadc37a.png
Непосредственно я хочу чтоб сетка просто обновилась, межет я вообще не туда копаю
Вызов функции на нажатие кнопки Generation

def buttonGenClick(self):
        a = crossword.Crossword(10, 10, '-', 5000, crossword.word_list)
        a.compute_crossword(2)
        sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setLableWorld.txt', "w" )
        print a.word_bank()
        sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setGrid.txt', "w" )
        print a.solution()
        #print a.word_find()
        sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setNumGrid.txt', "w" )
        print a.display()
        sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setQuare.txt', "w" )
        print a.legend()
        sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setNumQuare.txt', "w" )
        print len(a.current_word_list), 'out of', len(crossword.word_list)
        print a.debug
        self.createGrid(test_string)

Вызов функции self.createGrid(test_string) после выполнения генерации кроссворда и записи по файлам тхт
    def createGrid(self, data):
        self.createGrid = QtGui.QGroupBox("Prewiew")
        table = [line.split() for line in data.splitlines() if line]
        layout = QtGui.QGridLayout()
        
        
        for i, table in enumerate(table):
            for j, table in enumerate(table):
                if table == '-':
                    buttons = QtGui.QPushButton("")
                    buttons.setStyleSheet("background-color:black;")
                    buttons.setFixedSize(20,20)
                    layout.addWidget(buttons, i, j)
                    
                elif table == table:
                    buttons = QtGui.QPushButton(table)
                    buttons.setFixedSize(20,20)
                    buttons.setStyleSheet("background-color:white;")
                    buttons.setFont( QtGui.QFont("Arial", 10, QtGui.QFont.Bold))
                    layout.addWidget(buttons, i, j)
        
        self.createGrid.setLayout(layout)

Отредактировано INTJOGE (Апрель 17, 2012 14:52:37)

Офлайн

#10 Апрель 17, 2012 14:59:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

PyQt4 Создание GUI на основе вход txt файла

INTJOGE
Я так понял ругается он на QtGui.QGroupBox(“Prewiew”) но что-то догнать в чем именно дело не могу.

>>> class Foo():
	def foo(self):
		print "OK!"
		self.foo='sdasdasd'
		
>>> f=Foo()
>>> f.foo()
OK!
>>> f.foo()
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    f.foo()
TypeError: 'str' object is not callable
>>> 

Вот твоя ошибка
  def createGrid(self, data):
        self.createGrid = QtGui.QGroupBox("Prewiew")
Ты присвоил функции объект и пытаешься его вызвать :)



Офлайн

  • Начало
  • » GUI
  • » PyQt4 Создание GUI на основе вход txt файла[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version