Автор Тема: python i QVBoxLayout  (Прочетена 2214 пъти)

edmon

  • Участник
  • *****
  • Публикации: 33
    • Профил
python i QVBoxLayout
« -: Яну 28, 2017, 22:53 »
Имам два работещи примера за ComboBox, в единият има QVBoxLayout в другият няма. Искаше ми се да преправя този с
Лейаут, като го махна или като му променя размера, но когато го направя накрая не излиза нищо в прозореца.
Ето двата примерни кода:

Код:
#!/usr/bin/env python
#
# [SNIPPET_NAME: Combo Box Basic]
# [SNIPPET_CATEGORIES: PyQt4]
# [SNIPPET_DESCRIPTION: An basic example of a combo box]
# [SNIPPET_AUTHOR: Darren Worrall <dw@darrenworrall.co.uk>]
# [SNIPPET_LICENSE: GPL]
# [SNIPPET_DOCS: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qcombobox.html]

# example comboboxbasic.py

import sys
from PyQt4 import QtGui, QtCore

class ComboBoxBasic(QtGui.QWidget):
    """
    An basic example combo box application
    """

    def __init__(self):
        # create GUI
        QtGui.QMainWindow.__init__(self)
        self.setWindowTitle('Combo Box Basic')
        # Set the window dimensions
        self.resize(250,50)
       
        # vertical layout for widgets
        self.vbox = QtGui.QVBoxLayout()
        self.setLayout(self.vbox)

        # Create a combo box and add it to our layout
        self.combo = QtGui.QComboBox()
        self.vbox.addWidget(self.combo)

        # A label to display our selection
        self.lbl = QtGui.QLabel('Ubuntu')
        # Center align text
        self.lbl.setAlignment(QtCore.Qt.AlignHCenter)
        self.vbox.addWidget(self.lbl)

        # You can add items individually:
        self.combo.addItem('Ubuntu')
        self.combo.addItem('Fedora')

        # Or add a sequence in one call
        distrolist = ['Linux Mint', 'Gentoo', 'Mandriva']
        self.combo.addItems(distrolist)
       
        # Connect the activated signal on the combo box to our handler.
        # This is an overloaded signal, meaning there are variants of it, for
        # example the activated(int) variant emits the index of the chosen
        # option, rather than it's text
        self.connect(self.combo, QtCore.SIGNAL('activated(QString)'), self.combo_chosen)

    def combo_chosen(self, text):
        """
        Handler called when a distro is chosen from the combo box
        """
        self.lbl.setText(text)


# If the program is run directly or passed as an argument to the python
# interpreter then create a ComboBoxBasic instance and show it
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    gui = ComboBoxBasic()
    gui.show()
    app.exec_()

и

Код:
#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode PyQt4 tutorial

This example shows
how to use QtGui.QComboBox widget.
 
author: Jan Bodnar
website: zetcode.com
last edited: September 2011
"""

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):
   
    def __init__(self):
        super(Example, self).__init__()
       
        self.initUI()
       
    def initUI(self):     

        self.lbl = QtGui.QLabel("Ubuntu", self)

        combo = QtGui.QComboBox(self)
        combo.addItem("Ubuntu")
        combo.addItem("Mandriva")
        combo.addItem("Fedora")
        combo.addItem("Red Hat")
        combo.addItem("Gentoo")

        combo.move(50, 50)
        self.lbl.move(50, 150)

        combo.activated[str].connect(self.onActivated)       
         
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QtGui.QComboBox')
        self.show()
       
    def onActivated(self, text):
     
        self.lbl.setText(text)
        self.lbl.adjustSize() 
               
def main():
   
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Нещо не разбирам кое как става...
Ако коментирам редовете свързани с лейаута като
 
Код:
  self.vbox = QtGui.QVBoxLayout()
        self.setLayout(self.vbox)

Какво трябва да добавя , за да има все пак изобразен КомбоБокс?

ПС. Това са ми първи опити с Питон.
« Последна редакция: Яну 28, 2017, 22:55 от edmon »
Активен

growchie

  • Участник
  • *****
  • Публикации: 567
    • Профил
Re: python i QVBoxLayout
« Отговор #1 -: Яну 29, 2017, 14:32 »
Нарисувай си интерфейса с QtDesigner-а и си конвертирай след това файла до питонски код с pyuic4 some.ui -o some.py. После си ползвай нещата както е описано тук http://askubuntu.com/questions/264037/how-to-use-qt-creator-with-python
Никога не съм се занимавал с питонското Qt, но в С++ версията му за всеки обект трябва да си имаш parent. Не знам как е в питона, но ако комбо бокса ти не е с правилния парент няма да се изчертае.
Не знам каква представа имаш от Qt като цяло, но трябва да знаеш, че лейаутите се ползват за автоматично преоразмеряване на интерфейса при промяна на размера на прозореца. Те си имат пропъртита, които трябва да си ги разучиш. Най-елементарно става с дизайнера.
Активен

edmon

  • Участник
  • *****
  • Публикации: 33
    • Профил
Re: python i QVBoxLayout
« Отговор #2 -: Фев 01, 2017, 01:06 »
Благодаря за насоките.
Не искам с дизайнера, защото си мисля, че ще станат много сложни нещата,
а аз искам един комбобокс, един лейбъл, един бутон и евентуално някъде да се изпишат едни неща.....
И ми се искаше да мога по-ефективно да ги контролирам ....
НЯмам никакъв опит нито с QT нито с Питон:) тва съм си го наумил като проект с който да се понауча. :)
Активен

growchie

  • Участник
  • *****
  • Публикации: 567
    • Профил
Re: python i QVBoxLayout
« Отговор #3 -: Фев 01, 2017, 11:38 »
Така както ми ги описваш нещата ще е по-удачно да ползваш не QVBoxLayout, а QGridLayout http://doc.qt.io/qt-5/qgridlayout.html Освен това запознай се и с това http://doc.qt.io/qt-5/layout.html.
Мога да ти дам примерен код на с++, който се генерира от uic препроцесора, но не знам колко ще ти е интересно (като го погледнеш, ще се убедиш, че с дизайнера е по-лесно :) ).
Имай в предвид обаче, че да учиш питон и КюТе едновременно може да ти дойде малко нагоре. Qt е не само графичен фреймуърк, пълен е с доста абстракции и ще ти се отиде повече време да се занимаваш с неговите особености, а не да учиш питон. Освен това забелязвам, че семпълите ти са за qt4, а в момента най-новата версия е 5.7 и 4 е депрекирана.  Виж тук http://zetcode.com/gui/pyqt5/ може да ти е по-полезно от връзките към официалното qt.
Активен

edmon

  • Участник
  • *****
  • Публикации: 33
    • Профил
Re: python i QVBoxLayout
« Отговор #4 -: Фев 04, 2017, 10:03 »
За PyQT5 разбрах, че трябва аз да си компилирам нещо и понеже мисля да използвам и Виндовс за разработката не ми се занимава да се уча как се компилира и там. За това по-старата версия, за която има и повече примери.
Активен

growchie

  • Участник
  • *****
  • Публикации: 567
    • Профил
Re: python i QVBoxLayout
« Отговор #5 -: Фев 05, 2017, 10:43 »
Еми не знам точно какво има да се прави за уиндолз, но основната причина да ползвам Qt е точно междуплатформеността му (в интерес на истината нещата си ги пиша на macOS и после просто си прекомпилирам върху виртуалката с бодзицата). С с++ нещата са лесни - имаш си QtCreator и там нещата са платформено решени. Имай се пак в предвид, че Qt4 е депрекиран.
Активен

bvbfan

  • Участник
  • *****
  • Публикации: 1051
  • Distribution: KaOS
  • Window Manager: Plasma 5
    • Профил
Re: python i QVBoxLayout
« Отговор #6 -: Фев 05, 2017, 13:21 »
Не разбрах какво мислиш, че се компилира и защо ще ползваш Виндовс? Слагай кода си в тагове code=python в квадратни скоби, ползвай Qt5 и когато махаш layout няма да даваш setLayout, директно си инстанцираш ComboBox-a както в първият пример.
Активен

4096bits

  • Участник
  • *****
  • Публикации: 1955
    • Профил
Re: python i QVBoxLayout
« Отговор #7 -: Фев 05, 2017, 14:21 »
Да учиш Python чрез QT не е най-добрата идея. Аз се опитвам да уча Python-а и още не съм стигнал до GUI библиотеките. А и нямам намерение скоро да започвам. Мога доста по-интересни неща да се правя, вместо да чертая прозорци.

Можеш да попиташ за помощ и тук: https://python-forum.io/
« Последна редакция: Фев 05, 2017, 14:26 от 4096bits »
Активен

"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."

growchie

  • Участник
  • *****
  • Публикации: 567
    • Профил
Re: python i QVBoxLayout
« Отговор #8 -: Фев 05, 2017, 15:39 »
Един тролски въпрос който е леко оффтопик.
Защо се занимавате изобщо с питон-а, а не с неща като go  например? Ако е интерес от гледна точка намиране на работа разбирам и това не подлежи на коментар, но ако е за удоволствие...
Лично на мен go и джаваскрипт с нод.джиес са ми по-забавни.
Активен

4096bits

  • Участник
  • *****
  • Публикации: 1955
    • Профил
Re: python i QVBoxLayout
« Отговор #9 -: Фев 05, 2017, 17:17 »
Защо ли?! Честно, нямам представа. Да уточня, че не съм програмист. Дейността ми в съвсем различна посока. Стана ми интересно, че се ползва за толкова много неща, та и за плъгинчета на Блендер, Мах и други подобни графични приложения. Та и за какво ли не още. Но интереса ми тръгна най-вече от графичните програмки. Аз не се занимавам с тях, но покрай едно аверче. Харесва ми и лекотата с която се пише. Няма скоби навсякъде. След като си направих някои неща, най-вече за следене на туй-онуй по машината, едно елементарно и смешно плеърче за музика, малко нещо дето да ми оправя имената на mp3-ите, изкормих няколко сайта, забавата стана пълна. Най вече със сайтовете. Бих се занимавал и с Go, просто няма време за всичко. След като поусвоя питоня, мисля да поусвоя и JS, да си припомня CSS, HTML. Може би след това ще мога да обърна внимание и на нещо като Go. Там все още липсват достатъчно библиотеки. Трябва му време на този език. А и някои неща се правят по странен начин.
В най-близко бъдеще очаквам питона доста да ми улесни работата, та просто ще трябва да го поназнайвам.
« Последна редакция: Фев 05, 2017, 17:19 от 4096bits »
Активен

"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."

growchie

  • Участник
  • *****
  • Публикации: 567
    • Профил
Re: python i QVBoxLayout
« Отговор #10 -: Фев 05, 2017, 18:42 »
Стана ми интересно, че се ползва за толкова много неща, та и за плъгинчета на Блендер, Мах и други подобни графични приложения.
Мда, това е доста добра причина да се научи скриптов език. Един познат правеше една игра на блендър (май я направи вече и я пусна в стийма) и нещата си ги правеше на питон.
Активен

edmon

  • Участник
  • *****
  • Публикации: 33
    • Профил
Re: python i QVBoxLayout
« Отговор #11 -: Фев 06, 2017, 22:43 »
Един тролски въпрос който е леко оффтопик.
Защо се занимавате изобщо с питон-а, а не с неща като go  например? Ако е интерес от гледна точка намиране на работа разбирам и това не подлежи на коментар, но ако е за удоволствие...
Лично на мен go и джаваскрипт с нод.джиес са ми по-забавни.

За работа предимно, много време съм се чудил, защо по-дяволите в училищата и университетите не учат децата на практични работи, ами ги занимават с някакви абстракции... ей го ... днес е поредният ден от хиляди дни, в който това, че знам че синус х на квадрат + косинус х на квадрат е равно на единица не ми върши НИКАКВА РАБОТА, за да обядвам!!!
Активен

edmon

  • Участник
  • *****
  • Публикации: 33
    • Профил
Re: python i QVBoxLayout
« Отговор #12 -: Фев 06, 2017, 22:45 »
Не разбрах какво мислиш, че се компилира и защо ще ползваш Виндовс? Слагай кода си в тагове code=python в квадратни скоби, ползвай Qt5 и когато махаш layout няма да даваш setLayout, директно си инстанцираш ComboBox-a както в първият пример.

https://www.riverbankcomputing.com/software/pyqt/download

Binary installers for Windows are no longer provided.

На личният ми лаптоп имам Линукс, но на служебния съм принуден да използвам Уиндовс за да съм .... compliance
« Последна редакция: Фев 06, 2017, 22:52 от edmon »
Активен

edmon

  • Участник
  • *****
  • Публикации: 33
    • Профил
Re: python i QVBoxLayout
« Отговор #13 -: Фев 06, 2017, 23:04 »
Не разбрах какво мислиш, че се компилира и защо ще ползваш Виндовс? Слагай кода си в тагове code=python в квадратни скоби, ползвай Qt5 и когато махаш layout няма да даваш setLayout, директно си инстанцираш ComboBox-a както в първият пример.


Би ли бил така добър да махнеш от кода вертикалния бокс и пак да работи скрипта и да го споделиш де, за да мога да направя разлика и така де .. чета си тук една книжка по въпроса и започвам да се ориентирам, но когато има примери е по-лесно.
Активен

growchie

  • Участник
  • *****
  • Публикации: 567
    • Профил
Re: python i QVBoxLayout
« Отговор #14 -: Фев 07, 2017, 10:36 »

За работа предимно, много време съм се чудил, защо по-дяволите в училищата и университетите не учат децата на практични работи, ами ги занимават с някакви абстракции... ей го ... днес е поредният ден от хиляди дни, в който това, че знам че синус х на квадрат + косинус х на квадрат е равно на единица не ми върши НИКАКВА РАБОТА, за да обядвам!!!

Недей така, защото в моята работа без синусите и косинусите съм за никъде. За математиката недей да се оплакваш. Това е все едно азбуката на инженера. Ако не я знаеш си неграмотен. Виждам, че те кефи да програмираш. Ще ти се наложи да се занимаваш с графика и там да преминеш от една координатна система в друга. Няма кой да те спаси в този случай. "Полезните" неща се учат след средното образование. До тогава е добре да имаш по-широка обща култура.
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Коренуване при python
Общ форум
ko_drugo 3 2182 Последна публикация Фев 18, 2007, 00:21
от ko_drugo
Интернет програмиране с python
Web development
IvanX 14 4509 Последна публикация Авг 07, 2011, 01:24
от b2l
Пакетиране на python скрипт
Общ форум
pink 0 1004 Последна публикация Юли 12, 2007, 15:34
от pink
Python 3.1.2
Настройка на програми
fatalerrorbg 10 1932 Последна публикация Авг 30, 2010, 14:39
от bop_bop_mara
Проблем с Python
Настройка на програми
f1r3fl3x 4 1188 Последна публикация Юни 23, 2011, 22:25
от f1r3fl3x