from PySide.QtCore import *
from PySide.QtGui import *
import sys

class SearchDialog(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.line_edit = QLineEdit()
        self.ok_button = QPushButton("OK")
        hbox_box_button = QHBoxLayout()
        hbox_box_button.addWidget(self.line_edit)
        hbox_box_button.addWidget(self.ok_button)
        self.setLayout(hbox_box_button)
        self.layout().setContentsMargins(5, 5, 5, 5)
        self.ok_button.pressed.connect(self.change)
        self.hide()
    def clear(self):
        self.line_edit.clear()
    def change(self):
        self.parentWidget().change_label(self.line_edit.text())
        self.hide()
        self.clear()

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.search_dialog = SearchDialog()
        self.label = QLabel(self)
        self.setCentralWidget(self.label)
        shortcut = QShortcut(QKeySequence(Qt.Key_Tab), self, self.show_search_dialog)
        shortcut.setContext(Qt.ApplicationShortcut)
        self.show()
    def show_search_dialog(self):
        sd = self.search_dialog
        if sd.isVisible():
            sd.clear()
            sd.hide()
            print 'hide'
        else:
            global_p = self.mapToGlobal(QPoint(0,0))
            r = self.rect()
            global_p.setY(global_p.y())
            global_p.setX(global_p.x())
            sd.setFixedWidth(r.width())
            sd.move(global_p)
            sd.show()
            print 'show'
    def change_label(self, text):
        self.label.setText(text)

def main():
    app = QApplication([])
    main_window = MainWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

