Browse Source

qt: move window.get{Open,Save}FileName to util

Sometimes we want its "remember path" behaviour but it does not make sense to
parent the dialog from main window. When so, caller code no longer needs to
get a reference to a main window.

Also rm last usages of get_parent_main_window().
patch-4
SomberNight 4 years ago
parent
commit
b28b3994c7
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 4
      electrum/gui/qt/address_dialog.py
  2. 4
      electrum/gui/qt/completion_text_edit.py
  3. 74
      electrum/gui/qt/main_window.py
  4. 18
      electrum/gui/qt/qrcodewidget.py
  5. 19
      electrum/gui/qt/qrtextedit.py
  6. 2
      electrum/gui/qt/seed_dialog.py
  7. 16
      electrum/gui/qt/transaction_dialog.py
  8. 86
      electrum/gui/qt/util.py
  9. 24
      electrum/plugins/coldcard/qt.py
  10. 9
      electrum/plugins/safe_t/qt.py
  11. 9
      electrum/plugins/trezor/qt.py

4
electrum/gui/qt/address_dialog.py

@ -87,14 +87,14 @@ class AddressDialog(WindowModalDialog):
redeem_script = self.wallet.get_redeem_script(address) redeem_script = self.wallet.get_redeem_script(address)
if redeem_script: if redeem_script:
vbox.addWidget(QLabel(_("Redeem Script") + ':')) vbox.addWidget(QLabel(_("Redeem Script") + ':'))
redeem_e = ShowQRTextEdit(text=redeem_script) redeem_e = ShowQRTextEdit(text=redeem_script, config=self.config)
redeem_e.addCopyButton(self.app) redeem_e.addCopyButton(self.app)
vbox.addWidget(redeem_e) vbox.addWidget(redeem_e)
witness_script = self.wallet.get_witness_script(address) witness_script = self.wallet.get_witness_script(address)
if witness_script: if witness_script:
vbox.addWidget(QLabel(_("Witness Script") + ':')) vbox.addWidget(QLabel(_("Witness Script") + ':'))
witness_e = ShowQRTextEdit(text=witness_script) witness_e = ShowQRTextEdit(text=witness_script, config=self.config)
witness_e.addCopyButton(self.app) witness_e.addCopyButton(self.app)
vbox.addWidget(witness_e) vbox.addWidget(witness_e)

4
electrum/gui/qt/completion_text_edit.py

@ -32,8 +32,8 @@ from .util import ButtonsTextEdit
class CompletionTextEdit(ButtonsTextEdit): class CompletionTextEdit(ButtonsTextEdit):
def __init__(self, parent=None): def __init__(self):
super(CompletionTextEdit, self).__init__(parent) ButtonsTextEdit.__init__(self)
self.completer = None self.completer = None
self.moveCursor(QTextCursor.End) self.moveCursor(QTextCursor.End)
self.disable_suggestions() self.disable_suggestions()

74
electrum/gui/qt/main_window.py

@ -89,7 +89,8 @@ from .util import (read_QIcon, ColorScheme, text_dialog, icon_path, WaitingDialo
CloseButton, HelpButton, MessageBoxMixin, EnterButton, CloseButton, HelpButton, MessageBoxMixin, EnterButton,
import_meta_gui, export_meta_gui, import_meta_gui, export_meta_gui,
filename_field, address_field, char_width_in_lineedit, webopen, filename_field, address_field, char_width_in_lineedit, webopen,
TRANSACTION_FILE_EXTENSION_FILTER_ANY, MONOSPACE_FONT) TRANSACTION_FILE_EXTENSION_FILTER_ANY, MONOSPACE_FONT,
getOpenFileName, getSaveFileName)
from .util import ButtonsTextEdit, ButtonsLineEdit from .util import ButtonsTextEdit, ButtonsLineEdit
from .installwizard import WIF_HELP_TEXT from .installwizard import WIF_HELP_TEXT
from .history_list import HistoryList, HistoryModel from .history_list import HistoryList, HistoryModel
@ -841,38 +842,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
except TypeError: except TypeError:
self.tray.showMessage("Electrum", message, QSystemTrayIcon.Information, 20000) self.tray.showMessage("Electrum", message, QSystemTrayIcon.Information, 20000)
# custom wrappers for getOpenFileName and getSaveFileName, that remember the path selected by the user
def getOpenFileName(self, title, filter = ""):
directory = self.config.get('io_dir', os.path.expanduser('~'))
fileName, __ = QFileDialog.getOpenFileName(self, title, directory, filter)
if fileName and directory != os.path.dirname(fileName):
self.config.set_key('io_dir', os.path.dirname(fileName), True)
return fileName
def getSaveFileName(self, title, filename, filter="",
*, default_extension: str = None,
default_filter: str = None) -> Optional[str]:
directory = self.config.get('io_dir', os.path.expanduser('~'))
path = os.path.join(directory, filename)
file_dialog = QFileDialog(self, title, path, filter)
file_dialog.setAcceptMode(QFileDialog.AcceptSave)
if default_extension:
# note: on MacOS, the selected filter's first extension seems to have priority over this...
file_dialog.setDefaultSuffix(default_extension)
if default_filter:
assert default_filter in filter, f"default_filter={default_filter!r} does not appear in filter={filter!r}"
file_dialog.selectNameFilter(default_filter)
if file_dialog.exec() != QDialog.Accepted:
return None
selected_path = file_dialog.selectedFiles()[0]
if selected_path and directory != os.path.dirname(selected_path):
self.config.set_key('io_dir', os.path.dirname(selected_path), True)
return selected_path
def timer_actions(self): def timer_actions(self):
self.request_list.refresh_status() self.request_list.refresh_status()
# Note this runs in the GUI thread # Note this runs in the GUI thread
@ -2077,12 +2046,18 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
def do_export(): def do_export():
key = pr.get_id() key = pr.get_id()
name = str(key) + '.bip70' name = str(key) + '.bip70'
fn = self.getSaveFileName(_("Save invoice to file"), name, filter="*.bip70") fn = getSaveFileName(
parent=self,
title=_("Save invoice to file"),
filename=name,
filter="*.bip70",
config=self.config,
)
if not fn: if not fn:
return return
with open(fn, 'wb') as f: with open(fn, 'wb') as f:
data = f.write(pr.raw) data = f.write(pr.raw)
self.show_message(_('BIP70 invoice saved as' + ' ' + fn)) self.show_message(_('BIP70 invoice saved as {}').format(fn))
exportButton = EnterButton(_('Export'), do_export) exportButton = EnterButton(_('Export'), do_export)
buttons = Buttons(exportButton, CloseButton(d)) buttons = Buttons(exportButton, CloseButton(d))
else: else:
@ -2113,7 +2088,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
grid.addWidget(QLabel(_("Expires") + ':'), 4, 0) grid.addWidget(QLabel(_("Expires") + ':'), 4, 0)
grid.addWidget(QLabel(format_time(invoice.time + invoice.exp)), 4, 1) grid.addWidget(QLabel(format_time(invoice.time + invoice.exp)), 4, 1)
vbox.addLayout(grid) vbox.addLayout(grid)
invoice_e = ShowQRTextEdit() invoice_e = ShowQRTextEdit(config=self.config)
invoice_e.addCopyButton(self.app) invoice_e.addCopyButton(self.app)
invoice_e.setText(invoice.invoice) invoice_e.setText(invoice.invoice)
vbox.addWidget(invoice_e) vbox.addWidget(invoice_e)
@ -2392,7 +2367,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
ks_vbox.setContentsMargins(0, 0, 0, 0) ks_vbox.setContentsMargins(0, 0, 0, 0)
ks_w.setLayout(ks_vbox) ks_w.setLayout(ks_vbox)
mpk_text = ShowQRTextEdit(ks.get_master_public_key()) mpk_text = ShowQRTextEdit(ks.get_master_public_key(), config=self.config)
mpk_text.setMaximumHeight(150) mpk_text.setMaximumHeight(150)
mpk_text.addCopyButton(self.app) mpk_text.addCopyButton(self.app)
run_hook('show_xpub_button', mpk_text, ks) run_hook('show_xpub_button', mpk_text, ks)
@ -2461,8 +2436,14 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
help_text=None, show_copy_text_btn=False): help_text=None, show_copy_text_btn=False):
if not data: if not data:
return return
d = QRDialog(data, parent or self, title, help_text=help_text, d = QRDialog(
show_copy_text_btn=show_copy_text_btn) data=data,
parent=parent or self,
title=title,
help_text=help_text,
show_copy_text_btn=show_copy_text_btn,
config=self.config,
)
d.exec_() d.exec_()
@protected @protected
@ -2482,14 +2463,9 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
vbox.addWidget(QLabel(_("Address") + ': ' + address)) vbox.addWidget(QLabel(_("Address") + ': ' + address))
vbox.addWidget(QLabel(_("Script type") + ': ' + xtype)) vbox.addWidget(QLabel(_("Script type") + ': ' + xtype))
vbox.addWidget(QLabel(_("Private key") + ':')) vbox.addWidget(QLabel(_("Private key") + ':'))
keys_e = ShowQRTextEdit(text=pk) keys_e = ShowQRTextEdit(text=pk, config=self.config)
keys_e.addCopyButton(self.app) keys_e.addCopyButton(self.app)
vbox.addWidget(keys_e) vbox.addWidget(keys_e)
# if redeem_script:
# vbox.addWidget(QLabel(_("Redeem Script") + ':'))
# rds_e = ShowQRTextEdit(text=redeem_script)
# rds_e.addCopyButton(self.app)
# vbox.addWidget(rds_e)
vbox.addLayout(Buttons(CloseButton(d))) vbox.addLayout(Buttons(CloseButton(d)))
d.setLayout(vbox) d.setLayout(vbox)
d.exec_() d.exec_()
@ -2701,8 +2677,12 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
self.show_transaction(tx) self.show_transaction(tx)
def read_tx_from_file(self) -> Optional[Transaction]: def read_tx_from_file(self) -> Optional[Transaction]:
fileName = self.getOpenFileName(_("Select your transaction file"), fileName = getOpenFileName(
TRANSACTION_FILE_EXTENSION_FILTER_ANY) parent=self,
title=_("Select your transaction file"),
filter=TRANSACTION_FILE_EXTENSION_FILTER_ANY,
config=self.config,
)
if not fileName: if not fileName:
return return
try: try:

18
electrum/gui/qt/qrcodewidget.py

@ -9,8 +9,9 @@ from PyQt5.QtWidgets import (
) )
from electrum.i18n import _ from electrum.i18n import _
from electrum.simple_config import SimpleConfig
from .util import WindowModalDialog, get_parent_main_window, WWLabel from .util import WindowModalDialog, WWLabel, getSaveFileName
class QRCodeWidget(QWidget): class QRCodeWidget(QWidget):
@ -95,15 +96,17 @@ class QRDialog(WindowModalDialog):
def __init__( def __init__(
self, self,
*,
data, data,
parent=None, parent=None,
title="", title="",
show_text=False, show_text=False,
*,
help_text=None, help_text=None,
show_copy_text_btn=False, show_copy_text_btn=False,
config: SimpleConfig,
): ):
WindowModalDialog.__init__(self, parent, title) WindowModalDialog.__init__(self, parent, title)
self.config = config
vbox = QVBoxLayout() vbox = QVBoxLayout()
@ -122,11 +125,12 @@ class QRDialog(WindowModalDialog):
hbox.addStretch(1) hbox.addStretch(1)
def print_qr(): def print_qr():
main_window = get_parent_main_window(self) filename = getSaveFileName(
if main_window: parent=self,
filename = main_window.getSaveFileName(_("Select where to save file"), "qrcode.png") title=_("Select where to save file"),
else: filename="qrcode.png",
filename, __ = QFileDialog.getSaveFileName(self, _("Select where to save file"), "qrcode.png") config=self.config,
)
if not filename: if not filename:
return return
p = qrw.grab() p = qrw.grab()

19
electrum/gui/qt/qrtextedit.py

@ -4,14 +4,15 @@ from electrum.i18n import _
from electrum.plugin import run_hook from electrum.plugin import run_hook
from electrum.simple_config import SimpleConfig from electrum.simple_config import SimpleConfig
from .util import ButtonsTextEdit, MessageBoxMixin, ColorScheme from .util import ButtonsTextEdit, MessageBoxMixin, ColorScheme, getOpenFileName
class ShowQRTextEdit(ButtonsTextEdit): class ShowQRTextEdit(ButtonsTextEdit):
def __init__(self, text=None): def __init__(self, text=None, *, config: SimpleConfig):
ButtonsTextEdit.__init__(self, text) ButtonsTextEdit.__init__(self, text)
self.setReadOnly(1) self.config = config
self.setReadOnly(True)
icon = "qrcode_white.png" if ColorScheme.dark_scheme else "qrcode.png" icon = "qrcode_white.png" if ColorScheme.dark_scheme else "qrcode.png"
self.addButton(icon, self.qr_show, _("Show as QR code")) self.addButton(icon, self.qr_show, _("Show as QR code"))
@ -23,7 +24,11 @@ class ShowQRTextEdit(ButtonsTextEdit):
s = str(self.toPlainText()) s = str(self.toPlainText())
except: except:
s = self.toPlainText() s = self.toPlainText()
QRDialog(s, parent=self).exec_() QRDialog(
data=s,
parent=self,
config=self.config,
).exec_()
def contextMenuEvent(self, e): def contextMenuEvent(self, e):
m = self.createStandardContextMenu() m = self.createStandardContextMenu()
@ -44,7 +49,11 @@ class ScanQRTextEdit(ButtonsTextEdit, MessageBoxMixin):
run_hook('scan_text_edit', self) run_hook('scan_text_edit', self)
def file_input(self): def file_input(self):
fileName, __ = QFileDialog.getOpenFileName(self, 'select file') fileName = getOpenFileName(
parent=self,
title='select file',
config=self.config,
)
if not fileName: if not fileName:
return return
try: try:

2
electrum/gui/qt/seed_dialog.py

@ -105,7 +105,7 @@ class SeedLayout(QVBoxLayout):
if for_seed_words: if for_seed_words:
self.seed_e = ButtonsTextEdit() self.seed_e = ButtonsTextEdit()
else: # e.g. xpub else: # e.g. xpub
self.seed_e = ShowQRTextEdit() self.seed_e = ShowQRTextEdit(config=self.config)
self.seed_e.setReadOnly(True) self.seed_e.setReadOnly(True)
self.seed_e.setText(seed) self.seed_e.setText(seed)
else: # we expect user to enter text else: # we expect user to enter text

16
electrum/gui/qt/transaction_dialog.py

@ -53,7 +53,7 @@ from .util import (MessageBoxMixin, read_QIcon, Buttons, icon_path,
char_width_in_lineedit, TRANSACTION_FILE_EXTENSION_FILTER_SEPARATE, char_width_in_lineedit, TRANSACTION_FILE_EXTENSION_FILTER_SEPARATE,
TRANSACTION_FILE_EXTENSION_FILTER_ONLY_COMPLETE_TX, TRANSACTION_FILE_EXTENSION_FILTER_ONLY_COMPLETE_TX,
TRANSACTION_FILE_EXTENSION_FILTER_ONLY_PARTIAL_TX, TRANSACTION_FILE_EXTENSION_FILTER_ONLY_PARTIAL_TX,
BlockingWaitingDialog) BlockingWaitingDialog, getSaveFileName)
from .fee_slider import FeeSlider, FeeComboBox from .fee_slider import FeeSlider, FeeComboBox
from .confirm_tx_dialog import TxEditor from .confirm_tx_dialog import TxEditor
@ -331,11 +331,15 @@ class BaseTxDialog(QDialog, MessageBoxMixin):
extension = 'psbt' extension = 'psbt'
default_filter = TRANSACTION_FILE_EXTENSION_FILTER_ONLY_PARTIAL_TX default_filter = TRANSACTION_FILE_EXTENSION_FILTER_ONLY_PARTIAL_TX
name = f'{name}.{extension}' name = f'{name}.{extension}'
fileName = self.main_window.getSaveFileName(_("Select where to save your transaction"), fileName = getSaveFileName(
name, parent=self,
TRANSACTION_FILE_EXTENSION_FILTER_SEPARATE, title=_("Select where to save your transaction"),
default_extension=extension, filename=name,
default_filter=default_filter) filter=TRANSACTION_FILE_EXTENSION_FILTER_SEPARATE,
default_extension=extension,
default_filter=default_filter,
config=self.config,
)
if not fileName: if not fileName:
return return
if tx.is_complete(): # network tx hex if tx.is_complete(): # network tx hex

86
electrum/gui/qt/util.py

@ -458,8 +458,14 @@ def filename_field(parent, config, defaultname, select_msg):
def func(): def func():
text = filename_e.text() text = filename_e.text()
_filter = "*.csv" if text.endswith(".csv") else "*.json" if text.endswith(".json") else None _filter = "*.csv" if defaultname.endswith(".csv") else "*.json" if defaultname.endswith(".json") else None
p, __ = QFileDialog.getSaveFileName(None, select_msg, text, _filter) p = getSaveFileName(
parent=None,
title=select_msg,
filename=text,
filter=_filter,
config=config,
)
if p: if p:
filename_e.setText(p) filename_e.setText(p)
@ -935,9 +941,14 @@ class AcceptFileDragDrop:
raise NotImplementedError() raise NotImplementedError()
def import_meta_gui(electrum_window, title, importer, on_success): def import_meta_gui(electrum_window: 'ElectrumWindow', title, importer, on_success):
filter_ = "JSON (*.json);;All files (*)" filter_ = "JSON (*.json);;All files (*)"
filename = electrum_window.getOpenFileName(_("Open {} file").format(title), filter_) filename = getOpenFileName(
parent=electrum_window,
title=_("Open {} file").format(title),
filter=filter_,
config=electrum_window.config,
)
if not filename: if not filename:
return return
try: try:
@ -949,10 +960,15 @@ def import_meta_gui(electrum_window, title, importer, on_success):
on_success() on_success()
def export_meta_gui(electrum_window, title, exporter): def export_meta_gui(electrum_window: 'ElectrumWindow', title, exporter):
filter_ = "JSON (*.json);;All files (*)" filter_ = "JSON (*.json);;All files (*)"
filename = electrum_window.getSaveFileName(_("Select file to save your {}").format(title), filename = getSaveFileName(
'electrum_{}.json'.format(title), filter_) parent=electrum_window,
title=_("Select file to save your {}").format(title),
filename='electrum_{}.json'.format(title),
filter=filter_,
config=electrum_window.config,
)
if not filename: if not filename:
return return
try: try:
@ -964,24 +980,44 @@ def export_meta_gui(electrum_window, title, exporter):
.format(title, str(filename))) .format(title, str(filename)))
def get_parent_main_window( def getOpenFileName(*, parent, title, filter="", config: 'SimpleConfig') -> Optional[str]:
widget, *, allow_wizard: bool = False, """Custom wrapper for getOpenFileName that remembers the path selected by the user."""
) -> Union[None, 'ElectrumWindow', 'InstallWizard']: directory = config.get('io_dir', os.path.expanduser('~'))
"""Returns a reference to the ElectrumWindow this widget belongs to.""" fileName, __ = QFileDialog.getOpenFileName(parent, title, directory, filter)
from .main_window import ElectrumWindow if fileName and directory != os.path.dirname(fileName):
from .transaction_dialog import TxDialog config.set_key('io_dir', os.path.dirname(fileName), True)
from .installwizard import InstallWizard return fileName
for _ in range(100):
if widget is None:
return None def getSaveFileName(
if isinstance(widget, ElectrumWindow): *,
return widget parent,
if isinstance(widget, TxDialog): title,
return widget.main_window filename,
if isinstance(widget, InstallWizard) and allow_wizard: filter="",
return widget default_extension: str = None,
widget = widget.parentWidget() default_filter: str = None,
return None config: 'SimpleConfig',
) -> Optional[str]:
"""Custom wrapper for getSaveFileName that remembers the path selected by the user."""
directory = config.get('io_dir', os.path.expanduser('~'))
path = os.path.join(directory, filename)
file_dialog = QFileDialog(parent, title, path, filter)
file_dialog.setAcceptMode(QFileDialog.AcceptSave)
if default_extension:
# note: on MacOS, the selected filter's first extension seems to have priority over this...
file_dialog.setDefaultSuffix(default_extension)
if default_filter:
assert default_filter in filter, f"default_filter={default_filter!r} does not appear in filter={filter!r}"
file_dialog.selectNameFilter(default_filter)
if file_dialog.exec() != QDialog.Accepted:
return None
selected_path = file_dialog.selectedFiles()[0]
if selected_path and directory != os.path.dirname(selected_path):
config.set_key('io_dir', os.path.dirname(selected_path), True)
return selected_path
def icon_path(icon_basename): def icon_path(icon_basename):

24
electrum/plugins/coldcard/qt.py

@ -5,7 +5,8 @@ import copy
from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtWidgets import QPushButton, QLabel, QVBoxLayout, QWidget, QGridLayout from PyQt5.QtWidgets import QPushButton, QLabel, QVBoxLayout, QWidget, QGridLayout
from electrum.gui.qt.util import WindowModalDialog, CloseButton, Buttons from electrum.gui.qt.util import (WindowModalDialog, CloseButton, Buttons, getOpenFileName,
getSaveFileName)
from electrum.gui.qt.transaction_dialog import TxDialog from electrum.gui.qt.transaction_dialog import TxDialog
from electrum.gui.qt.main_window import ElectrumWindow from electrum.gui.qt.main_window import ElectrumWindow
@ -64,8 +65,13 @@ class Plugin(ColdcardPlugin, QtPluginBase):
basename = wallet.basename().rsplit('.', 1)[0] # trim .json basename = wallet.basename().rsplit('.', 1)[0] # trim .json
name = f'{basename}-cc-export.txt'.replace(' ', '-') name = f'{basename}-cc-export.txt'.replace(' ', '-')
fileName = main_window.getSaveFileName(_("Select where to save the setup file"), fileName = getSaveFileName(
name, "*.txt") parent=main_window,
title=_("Select where to save the setup file"),
filename=name,
filter="*.txt",
config=self.config,
)
if fileName: if fileName:
with open(fileName, "wt") as f: with open(fileName, "wt") as f:
ColdcardPlugin.export_ms_wallet(wallet, f, basename) ColdcardPlugin.export_ms_wallet(wallet, f, basename)
@ -191,10 +197,14 @@ class CKCCSettingsDialog(WindowModalDialog):
def start_upgrade(self, client): def start_upgrade(self, client):
# ask for a filename (must have already downloaded it) # ask for a filename (must have already downloaded it)
mw = self.window
dev = client.dev dev = client.dev
fileName = mw.getOpenFileName("Select upgraded firmware file", "*.dfu") fileName = getOpenFileName(
parent=self,
title="Select upgraded firmware file",
filter="*.dfu",
config=self.window.config,
)
if not fileName: if not fileName:
return return
@ -220,7 +230,7 @@ class CKCCSettingsDialog(WindowModalDialog):
if magic != FW_HEADER_MAGIC: if magic != FW_HEADER_MAGIC:
raise ValueError("Bad magic") raise ValueError("Bad magic")
except Exception as exc: except Exception as exc:
mw.show_error("Does not appear to be a Coldcard firmware file.\n\n%s" % exc) self.window.show_error("Does not appear to be a Coldcard firmware file.\n\n%s" % exc)
return return
# TODO: # TODO:
@ -228,7 +238,7 @@ class CKCCSettingsDialog(WindowModalDialog):
# - warn them about the reboot? # - warn them about the reboot?
# - length checks # - length checks
# - add progress local bar # - add progress local bar
mw.show_message("Ready to Upgrade.\n\nBe patient. Unit will reboot itself when complete.") self.window.show_message("Ready to Upgrade.\n\nBe patient. Unit will reboot itself when complete.")
def doit(): def doit():
dlen, _ = dev.upload_file(firmware, verify=True) dlen, _ = dev.upload_file(firmware, verify=True)

9
electrum/plugins/safe_t/qt.py

@ -9,7 +9,7 @@ from PyQt5.QtWidgets import (QVBoxLayout, QLabel, QGridLayout, QPushButton,
QMessageBox, QFileDialog, QSlider, QTabWidget) QMessageBox, QFileDialog, QSlider, QTabWidget)
from electrum.gui.qt.util import (WindowModalDialog, WWLabel, Buttons, CancelButton, from electrum.gui.qt.util import (WindowModalDialog, WWLabel, Buttons, CancelButton,
OkButton, CloseButton) OkButton, CloseButton, getOpenFileName)
from electrum.i18n import _ from electrum.i18n import _
from electrum.plugin import hook from electrum.plugin import hook
from electrum.util import bh2u from electrum.util import bh2u
@ -276,8 +276,11 @@ class SettingsDialog(WindowModalDialog):
invoke_client('toggle_passphrase', unpair_after=currently_enabled) invoke_client('toggle_passphrase', unpair_after=currently_enabled)
def change_homescreen(): def change_homescreen():
dialog = QFileDialog(self, _("Choose Homescreen")) filename = getOpenFileName(
filename, __ = dialog.getOpenFileName() parent=self,
title=_("Choose Homescreen"),
config=config,
)
if not filename: if not filename:
return # user cancelled return # user cancelled

9
electrum/plugins/trezor/qt.py

@ -8,7 +8,7 @@ from PyQt5.QtWidgets import (QVBoxLayout, QLabel, QGridLayout, QPushButton,
QMessageBox, QFileDialog, QSlider, QTabWidget) QMessageBox, QFileDialog, QSlider, QTabWidget)
from electrum.gui.qt.util import (WindowModalDialog, WWLabel, Buttons, CancelButton, from electrum.gui.qt.util import (WindowModalDialog, WWLabel, Buttons, CancelButton,
OkButton, CloseButton, PasswordLineEdit) OkButton, CloseButton, PasswordLineEdit, getOpenFileName)
from electrum.i18n import _ from electrum.i18n import _
from electrum.plugin import hook from electrum.plugin import hook
from electrum.util import bh2u from electrum.util import bh2u
@ -542,8 +542,11 @@ class SettingsDialog(WindowModalDialog):
invoke_client('toggle_passphrase', unpair_after=currently_enabled) invoke_client('toggle_passphrase', unpair_after=currently_enabled)
def change_homescreen(): def change_homescreen():
dialog = QFileDialog(self, _("Choose Homescreen")) filename = getOpenFileName(
filename, __ = dialog.getOpenFileName() parent=self,
title=_("Choose Homescreen"),
config=config,
)
if not filename: if not filename:
return # user cancelled return # user cancelled

Loading…
Cancel
Save