Найти - Пользователи
Полная версия: PyQt4 Создание GUI на основе вход txt файла
Начало » GUI » PyQt4 Создание GUI на основе вход txt файла
1 2 3
INTJOGE
Привет!

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

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

на основе него нужно построить допустим “-” это button, а “k” это TextEdit это впрочем не так важно что будет, нужна сама идея как это реализовать, а если и с примерчиком
reclosedev
Где конкретно проблемы возникают?
Для создания виджетов можно сделать словарь с записями вида: код_виджета -> фабрика_виджета.
Для динамического добавления виджетов - использовать 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_())
INTJOGE
reclosedev
Где конкретно проблемы возникают?
Да проблема возникла именно в этом, как вытащить инфу из файла, и на основе нее построить то что я хочу.
В файле может быть что-то типо этого:
Pyton–
y——
t——-
o——
n——
За пример спасибо то что НУЖНО!

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

Обработка файла будет зависть от придуманного вами формата. Для кода из моего примера можно заменить test_string = … на
with open('data.txt') as f:
    test_string = f.read()
INTJOGE
Спасибо за пример и подробное пояснение! + вам)
INTJOGE
У меня еще возникло пару вопросов
http://s56.radikal.ru/i151/1204/36/01169b5d8a5d.jpg


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

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


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

Спасибо, за помощь)
INTJOGE
И опять я тут Сразу извиняюсь за надоедливость
Я так понял ругается он на 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)
FishHook
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")
Ты присвоил функции объект и пытаешься его вызвать :)

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB