Уведомления

Группа в Telegram: @pythonsu

#1 Июль 14, 2015 12:50:46

a.medveditskov
Зарегистрирован: 2015-02-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

Доброго времени суток, господа питонисты.
Помогите советом чайнику, буду премного благодарен за науку.
И так, на форме есть панелька ToolBar. По нажатию правой кнопки мышки на панели выскакивает Button ну и ToolBar становится невидимой (visibilityChanged(bool)). Да, все так и должно быть, но только в данном случае мне это не требуется. Нет, не так сказал… Требуется исключить появления Button по нажатию правой кнопки и, следовательно, исключить для пользователя возможность закрытия ToolBar'a? Сильно не пинайте за глупый вопрос, у меня уважительные причины…
Спасибо.

Офлайн

#2 Июль 14, 2015 14:34:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

Приведи код.



Офлайн

#3 Июль 14, 2015 15:33:44

a.medveditskov
Зарегистрирован: 2015-02-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

#Пример - учебный, если пойму как он работает, то все ОК.
#Листинг 726. QAction.py
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys

class MyLabel(QtGui.QLabel):
def __init__(self, txt, parent=None):
QtGui.QLabel.__init__(self, txt, parent)

def event(self, e):
if e.type() == QtCore.QEvent.StatusTip:
self.setText(e.tip())
return True
return QtGui.QLabel.event(self, e)

class MyWidget(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.label = MyLabel(“Содержимое страницы”)
self.button = QtGui.QPushButton(“Сделать доступным/недоступным”)
self.box = QtGui.QVBoxLayout()
self.box.addWidget(self.label)
self.box.addWidget(self.button)
self.setLayout(self.box)

class MyWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.w = MyWidget()
self.setCentralWidget(self.w)
self.w.button.clicked.connect(self.on_clicked)
self.add_menu()
self.add_tool_bar()
self.statusBar().showMessage(“”)

def add_menu(self):
self.menuFile = QtGui.QMenu(“&File”)

self.actOpen = QtGui.QAction(self)
self.actOpen.setText(“&Open”)
self.actOpen.setShortcut(QtGui.QKeySequence.Open)
self.actOpen.setShortcutContext(QtCore.Qt.WindowShortcut)
self.actOpen.setToolTip(“Текст всплывающей подсказки”)
self.actOpen.setWhatsThis(“Текст справки”)
self.actOpen.setStatusTip(“Текст для строки состояния”)
self.actOpen.triggered.connect(self.on_open)
self.actOpen.hovered.connect(self.on_hovered)
self.menuFile.addAction(self.actOpen)

self.actCheckable = QtGui.QAction(“&Checkable”, self)
self.actCheckable.setCheckable(True)
self.actCheckable.setChecked(True)
self.actCheckable.setIconVisibleInMenu(False)
ico = self.style().standardIcon(
QtGui.QStyle.SP_MessageBoxCritical)
self.actCheckable.setIcon(ico)
f = self.actCheckable.font()
f.setBold(True)
self.actCheckable.setFont(f)
self.actCheckable.changed.connect(self.on_changed)
self.actCheckable.toggled.connect(self.on_toggled)
self.menuFile.addAction(self.actCheckable)

self.actSep = QtGui.QAction(self)
self.actSep.setSeparator(True)
self.menuFile.addAction(self.actSep)

self.actExit = QtGui.QAction(“&Exit”, self)
self.actExit.setIcon(ico)
self.actExit.setShortcut(“Ctrl+W”)
self.actExit.triggered.connect(QtGui.qApp.quit)
self.menuFile.addAction(self.actExit)

self.actH = QtGui.QAction(“H&elps”, self)
ico2 = self.style().standardIcon(
QtGui.QStyle.SP_MessageBoxInformation)
self.actH.setIcon(ico2)
self.menuHelp = QtGui.QMenu(“&Help”)
self.actHelp = QtGui.QAction(“Help”, self)
self.actHelp.setShortcut(“F1”)
self.menuHelp.addAction(self.actHelp)
self.actH.setMenu(self.menuHelp)
self.menuFile.addAction(self.actH)

self.actMenuFile = self.menuBar().addMenu(self.menuFile)

def add_tool_bar(self):
self.toolBar = QtGui.QToolBar(“MyToolBar”)
self.toolBar.addAction(self.actCheckable)
self.toolBar.addAction(self.actH)
self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)

def on_open(self):
print(“Выбран пункт меню Open”)

def on_hovered(self):
self.actOpen.showStatusText(self.w.label)

def on_toggled(self, status):
print(“on_toggled”, status)

def on_changed(self):
print(“on_changed”)

def on_clicked(self):
self.actCheckable.setEnabled(not self.actCheckable.isEnabled())

app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(“Класс QAction”)
window.resize(500, 350)
window.show()
sys.exit(app.exec_())

Офлайн

#4 Июль 14, 2015 23:50:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

Используй теги кода, иначе пропадает табуляция.



Офлайн

#5 Июль 15, 2015 10:39:36

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

PyQt4, ToolBar на форме...

self.toolBar.setContextMenuPolicy(QtCore.Qt.NoContextMenu)



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

Отредактировано Rodegast (Июль 15, 2015 10:42:50)

Офлайн

#6 Июль 15, 2015 13:25:50

a.medveditskov
Зарегистрирован: 2015-02-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

Да, это (вероятно) то, что я искал…
Однако, питон “кушает код”, не ругается, но и не реагирует на эту строку?
К чему бы это, вроде уже не понедельник… и еще не пятница?

Офлайн

#7 Июль 16, 2015 09:49:07

a.medveditskov
Зарегистрирован: 2015-02-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

Попытка номер 2.
Вставляю текст примера.
Нужно сделать так, чтобы по нажатию правой кнопки мыши на ToolBar'е невозможно было бы закрыть панельку? Остальное - см. выше.

<code>
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys

class MyLabel(QtGui.QLabel):
def __init__(self, txt, parent=None):
QtGui.QLabel.__init__(self, txt, parent)

def event(self, e):
if e.type() == QtCore.QEvent.StatusTip:
self.setText(e.tip())
return True
return QtGui.QLabel.event(self, e)

class MyWidget(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.label = MyLabel(“Содержимое страницы”)
self.button = QtGui.QPushButton(“Сделать доступным/недоступным”)
self.box = QtGui.QVBoxLayout()
self.box.addWidget(self.label)
self.box.addWidget(self.button)
self.setLayout(self.box)

class MyWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.w = MyWidget()
self.setCentralWidget(self.w)
self.w.button.clicked.connect(self.on_clicked)
self.add_menu()
self.add_tool_bar()
self.statusBar().showMessage(“”)

def add_menu(self):
self.menuFile = QtGui.QMenu(“&File”)
self.actOpen = QtGui.QAction(self)
self.actOpen.setText(“&Open”)
self.actOpen.setShortcut(QtGui.QKeySequence.Open)
self.actOpen.setShortcutContext(QtCore.Qt.WindowShortcut)
self.actOpen.setToolTip(“Текст всплывающей подсказки”)
self.actOpen.setWhatsThis(“Текст справки”)
self.actOpen.setStatusTip(“Текст для строки состояния”)
self.actOpen.triggered.connect(self.on_open)
self.actOpen.hovered.connect(self.on_hovered)
self.menuFile.addAction(self.actOpen)

self.actCheckable = QtGui.QAction(“&Checkable”, self)
self.actCheckable.setCheckable(True)
self.actCheckable.setChecked(True)
self.actCheckable.setIconVisibleInMenu(False)
ico = self.style().standardIcon(
QtGui.QStyle.SP_MessageBoxCritical)
self.actCheckable.setIcon(ico)
f = self.actCheckable.font()
f.setBold(True)
self.actCheckable.setFont(f)
self.actCheckable.changed.connect(self.on_changed)
self.actCheckable.toggled.connect(self.on_toggled)
self.menuFile.addAction(self.actCheckable)

self.actSep = QtGui.QAction(self)
self.actSep.setSeparator(True)
self.menuFile.addAction(self.actSep)

self.actExit = QtGui.QAction(“&Exit”, self)
self.actExit.setIcon(ico)
self.actExit.setShortcut(“Ctrl+W”)
self.actExit.triggered.connect(QtGui.qApp.quit)
self.menuFile.addAction(self.actExit)

self.actH = QtGui.QAction(“H&elps”, self)
ico2 = self.style().standardIcon(
QtGui.QStyle.SP_MessageBoxInformation)
self.actH.setIcon(ico2)
self.menuHelp = QtGui.QMenu(“&Help”)
self.actHelp = QtGui.QAction(“Help”, self)
self.actHelp.setShortcut(“F1”)
self.menuHelp.addAction(self.actHelp)
self.actH.setMenu(self.menuHelp)
self.menuFile.addAction(self.actH)

self.actMenuFile = self.menuBar().addMenu(self.menuFile)

def add_tool_bar(self):
self.toolBar = QtGui.QToolBar(“MyToolBar”)
##########################################
self.toolBar.setContextMenuPolicy(QtCore.Qt.NoContextMenu) #Не работает
##########################################
self.toolBar.addAction(self.actCheckable)
self.toolBar.addAction(self.actH)
self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)



def on_open(self):
print(“Выбран пункт меню Open”)

def on_hovered(self):
self.actOpen.showStatusText(self.w.label)

def on_toggled(self, status):
print(“on_toggled”, status)

def on_changed(self):
print(“on_changed”)

def on_clicked(self):
self.actCheckable.setEnabled(not self.actCheckable.isEnabled())

app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(“Класс QAction”)
window.resize(500, 350)
window.show()
sys.exit(app.exec_())
<code/>

Офлайн

#8 Июль 16, 2015 09:51:55

a.medveditskov
Зарегистрирован: 2015-02-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

Да, что-то пошло не так…
Объявляется перерыв.

Офлайн

#9 Июль 16, 2015 10:12:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

a.medveditskov
<code/>
Вместо угловых скобок квадратные надо.



Офлайн

#10 Июль 16, 2015 12:56:29

a.medveditskov
Зарегистрирован: 2015-02-15
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4, ToolBar на форме...

Спасибо, исправил. Хотя, почему квадратные? Когда везде стоят угловые, ну да ладно…
И так, звучит барабанная дробь… - попытка номер три!

# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys

class MyLabel(QtGui.QLabel):
def __init__(self, txt, parent=None):
QtGui.QLabel.__init__(self, txt, parent)

def event(self, e):
if e.type() == QtCore.QEvent.StatusTip:
self.setText(e.tip())
return True
return QtGui.QLabel.event(self, e)

class MyWidget(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.label = MyLabel("Содержимое страницы")
self.button = QtGui.QPushButton("Сделать доступным/недоступным")
self.box = QtGui.QVBoxLayout()
self.box.addWidget(self.label)
self.box.addWidget(self.button)
self.setLayout(self.box)

class MyWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.w = MyWidget()
self.setCentralWidget(self.w)
self.w.button.clicked.connect(self.on_clicked)
self.add_menu()
self.add_tool_bar()
self.statusBar().showMessage("")

def add_menu(self):
self.menuFile = QtGui.QMenu("&File")
self.actOpen = QtGui.QAction(self)
self.actOpen.setText("&Open")
self.actOpen.setShortcut(QtGui.QKeySequence.Open)
self.actOpen.setShortcutContext(QtCore.Qt.WindowShortcut)
self.actOpen.setToolTip("Текст всплывающей подсказки")
self.actOpen.setWhatsThis("Текст справки")
self.actOpen.setStatusTip("Текст для строки состояния")
self.actOpen.triggered.connect(self.on_open)
self.actOpen.hovered.connect(self.on_hovered)
self.menuFile.addAction(self.actOpen)

self.actCheckable = QtGui.QAction("&Checkable", self)
self.actCheckable.setCheckable(True)
self.actCheckable.setChecked(True)
self.actCheckable.setIconVisibleInMenu(False)
ico = self.style().standardIcon(
QtGui.QStyle.SP_MessageBoxCritical)
self.actCheckable.setIcon(ico)
f = self.actCheckable.font()
f.setBold(True)
self.actCheckable.setFont(f)
self.actCheckable.changed.connect(self.on_changed)
self.actCheckable.toggled["bool"].connect(self.on_toggled)
self.menuFile.addAction(self.actCheckable)

self.actSep = QtGui.QAction(self)
self.actSep.setSeparator(True)
self.menuFile.addAction(self.actSep)

self.actExit = QtGui.QAction("&Exit", self)
self.actExit.setIcon(ico)
self.actExit.setShortcut("Ctrl+W")
self.actExit.triggered.connect(QtGui.qApp.quit)
self.menuFile.addAction(self.actExit)

self.actH = QtGui.QAction("H&elps", self)
ico2 = self.style().standardIcon(
QtGui.QStyle.SP_MessageBoxInformation)
self.actH.setIcon(ico2)
self.menuHelp = QtGui.QMenu("&Help")
self.actHelp = QtGui.QAction("Help", self)
self.actHelp.setShortcut("F1")
self.menuHelp.addAction(self.actHelp)
self.actH.setMenu(self.menuHelp)
self.menuFile.addAction(self.actH)

self.actMenuFile = self.menuBar().addMenu(self.menuFile)

def add_tool_bar(self):
self.toolBar = QtGui.QToolBar("MyToolBar")
##########################################
self.toolBar.setContextMenuPolicy(QtCore.Qt.NoContextMenu) #Не работает
##########################################
self.toolBar.addAction(self.actCheckable)
self.toolBar.addAction(self.actH)
self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)



def on_open(self):
print("Выбран пункт меню Open")

def on_hovered(self):
self.actOpen.showStatusText(self.w.label)

def on_toggled(self, status):
print("on_toggled", status)

def on_changed(self):
print("on_changed")

def on_clicked(self):
self.actCheckable.setEnabled(not self.actCheckable.isEnabled())

app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle("Класс QAction")
window.resize(500, 350)
window.show()
sys.exit(app.exec_())
[code/]

О-о-о-п-а! Сработало. Правда не так красиво, как у других. Ну да ладно, пока пусть так.
Спасибо за умные наставления.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version